用于高分辨率图像的Opencv角点检测

时间:2012-06-01 07:21:18

标签: c opencv computer-vision

我刚刚使用OpenCV实现了角点检测,我将角点值设为零。我使用3488 * 2616分辨率的相机图像。有没有找到高分辨率图像的角点检测的正确方法。我不是知道我在哪里犯了我的错误。在这里我也附上了我的代码和图片。请帮助我。对于我的英语,我是opencv.sorry的新手。

int board_w = 6;
int board_h = 6;
const int MAX_CORNERS = 500;

int main()
{

    int board_n = (board_w-1) * (board_h-1);
    CvSize board_sz = cvSize( board_w-1, board_h-1 );


    CvPoint2D32f* corners = new CvPoint2D32f[board_n];
    int cornerCount = 0;

    IplImage *image = cvLoadImage("myimage.jpg");
    IplImage *gray_image = cvCreateImage(cvGetSize(image),8,1);
    cvCvtColor(image, gray_image, CV_BGR2GRAY );
const int N = cvFindChessboardCorners(gray_image,board_sz,&corners[0],&cornerCount,10);


    cvFindCornerSubPix(gray_image,&corners[0],cornerCount,cvSize(3,3),cvSize(-1,-1),cvTermCriteria(CV_TERMCRIT_EPS,0,.01)); 

    printf("\ the count was:%d \n",cornerCount);
    for (int i = 0; i < cornerCount; i++)
    {
cvCircle (image, cvPointFrom32f (corners[i]), 3, CV_RGB (0, 0, 255), 2);

    }

        cvNamedWindow("firstframe");            
        cvShowImage("firstframe",image);
        cvWaitKey(0);
    cvReleaseImage(&image);
    cvReleaseImage(&gray_image);



}

该代码适用于普通的棋盘图像。但是当使用具有该分辨率的实时相机图像时,它将无法工作。请帮助我。提前感谢。 enter image description here

1 个答案:

答案 0 :(得分:0)

如果您怀疑检测确实因为使用高分辨率图像而失败,您可以随时cvResize() IplImage to a smaller size验证您的观察结果。