【发布时间】:2011-06-28 01:37:52
【问题描述】:
我只是想试试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。谢谢!
【问题讨论】:
-
我们在哪里可以找到您用于测试的图像?
-
您似乎正在使用一个您以前从未使用过的函数 (
cvCornerHarris),因此不要将它放在代码中间并期望它开箱即用。这是一个提示,好吗?不要生气。仅这种做法就可以为您节省大量编码时间。因此,将来,将您的问题隔离为一个最小的示例,不要害怕使用它并测试其他参数。如果你这样做了,你最终会找到一组适合你的参数。