gpt4 book ai didi

c++ - 无法使用 cv CornerHarris() 获取输出结果

转载 作者:太空狗 更新时间:2023-10-29 20:30:36 25 4
gpt4 key购买 nike

我只想试试 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);

我可以获得 cvCanny (cannyImg) 的预期输出图像,但 cvCornerHarris (harrisImg >) 是一个没有任何内容的黑色图像。请帮助解释如何使用此函数cvCornerHarris。谢谢!

最佳答案

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

用于处理一幅图像的参数在应用于其他类型图像时可能不会产生相同水平的结果。现在,考虑以下代码:

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);

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

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

输入图片:

a_house
(来源:123desenhosparacolorir.com)

输出:

harry's_house

关于c++ - 无法使用 cv CornerHarris() 获取输出结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6500707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com