无法使用cvCornerHarris()获得输出结果

Nau*_*uhc 3 c++ opencv

我只想尝试openCV函数--cvCornerHarris.这是我的c ++代码:

//image file
    char imagePath[256] = "./images/lena512color.tiff";
    printf("%s\n", imagePath);

    IplImage* srcImg = cvLoadImage(imagePath, 1);
    if(NULL == srcImg){
        printf("Can not open image file(s).\n");
        return -1;
    }
    IplImage* srcImgGry = cvCreateImage(cvGetSize(srcImg), IPL_DEPTH_8U, 1);
    cvCvtColor(srcImg, srcImgGry, CV_RGB2GRAY);
    // Canny and Harris expect grayscale  (8-bit) input.
    // And output of harris image must be 32-bit float .
    IplImage* harrisImg = cvCreateImage(cvGetSize(srcImg), IPL_DEPTH_32F, 1);
    IplImage* cannyImg = cvCreateImage(cvGetSize(srcImg), IPL_DEPTH_8U, 1);

    //// Corner detection using Harris-corner
    cvCornerHarris(srcImgGry, harrisImg, 5, 5, 0.04);
    cvCanny(srcImgGry, cannyImg, 50, 100, 3);

    // (5)Display the result
    cvNamedWindow ("Img", CV_WINDOW_AUTOSIZE);
    cvShowImage ("Img", srcImgGry);
    cvNamedWindow ("Harris", CV_WINDOW_AUTOSIZE);
    cvShowImage ("Harris", harrisImg);
    cvNamedWindow ("Canny", CV_WINDOW_AUTOSIZE);
    cvShowImage ("Canny", cannyImg);
    cvWaitKey (0);

    cvDestroyWindow ("Harris");
    cvDestroyWindow ("Img");
    cvReleaseImage (&srcImg);
    cvReleaseImage (&srcImgGry);
    cvReleaseImage (&harrisImg);
    cvReleaseImage (&cannyImg);
Run Code Online (Sandbox Code Playgroud)

我能得到的预期输出图像cvCanny(cannyImg),但在输出图像cvCornerHarris(harrisImg)是没有在其上的黑色图像.请帮助解释如何使用此功能cvCornerHarris.谢谢!

kar*_*lip 6

一切都与参数有关!人们倾向于相信有神奇的参数可以适用于所有类型的图像和场景.不幸的是,这不会发生在现实世界中.

当应用于其他类型的图像时,用于处理一个图像的参数可能不会产生相同级别的结果.现在,请考虑以下代码:

IplImage* colored = cvLoadImage("house.jpg", CV_LOAD_IMAGE_UNCHANGED);
if (!colored)
{
    printf("Can not open image file(s).\n");
    return -1;
}

IplImage* gray = cvCreateImage(cvGetSize(colored), IPL_DEPTH_8U, 1);
cvCvtColor(colored, gray, CV_RGB2GRAY);

IplImage* harris = cvCreateImage(cvGetSize(colored), IPL_DEPTH_32F, 1);
cvCornerHarris(gray, harris, 3, 11, 0.07);

cvNamedWindow("Harris", CV_WINDOW_AUTOSIZE);
cvShowImage ("Harris", harris);
Run Code Online (Sandbox Code Playgroud)

正如您在下面看到的,这些参数产生了不错的结果(我的观点).但是,请记住,它们可能不适合您.如您在测试中观察到的那样,错误的参数将产生黑色图像(即不会检测到任何内容).

答案是:查看文档以了解这些参数的含义以及它们如何影响结果.最重要的是,与它们一起玩,直到它们产生满足您需求的图像.

输入图片:

a_house http://www.123desenhosparacolorir.com/images/house-coloring-pages-2/house-coloring-pages-2.jpg

输出:

harry's_house