|
我现在在用arm11 6410利用opencv做指针表的识别,我的思路是利用opencv,找出表盘上最长的一根直线作为指针,然后求直线的斜率作为指针的倾斜角。现在最长的直线已找到,不过遇到以下几个问题:
1.图像采集问题
我是在arm11上运行opencv,本来想利用opencv直接控制摄像头呢,可是一直控制不明白,就直接用V4L2了,arm11是自带jpeg编码器的 我现在已经通过摄像头采集图像,然后通过jpeg编码器进行编码。我现在的做法是通过fwrite()函数把编码后的数据写成jpeg格式的图像文件,再通过cvLoadeImage把jpeg图像的数据读进来。可是写文件按和读文件太浪费时间,opencv能不能直接从图像缓冲区里把数据直接读进来啊?我试着直接把数据赋给ipIimage->date,然后cvSaveImage()保存图像,可是图像是一片黑。是不是因为ipIimage->date里面存的是图像数据,而我把图像缓冲区的全部数据都复制进去额原因呢?因为图像缓冲区里的数据既有jpeg格式的数据头又有数据?不知道是什么原因。
2.数据不稳定
我是利用以下的代码来算斜率的
lines = cvHoughLines2( canny_dst, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 45, 45, 4);
for( i = 0; i < lines->total; i++ )
{
CvPoint* line = (CvPoint*)cvGetSeqElem(lines,i);
kp = (line[1].y-line[0].y)/(line[1].x-line[0].x);
if(kp != 0)
{
kp = ((line[1].y+line[0].y)/2- 278)/((line[1].x+line[0].x)/2 - 240);
k = k + kp;
cvLine( color_dst, line[0], line[1], CV_RGB(255,0,0), 1, CV_AA, 0 );
}
}
k = k/i;
printf("k = %f\n",k);
这里的指针表的指针的圆心坐标是(240,278),可是输出的斜率一直不稳定,就是对同一个表头指针不动的时候,连续拍照识别,输出的k差别很大。
哪位同仁在做相同的项目,请指教啊?我的QQ:420890901 |
|