0

我有下面的代码:

 // Image Processing.cpp : Defines the entry point for the console application.
 //
 //Save an available image.
 #include "stdafx.h"
 #include "cv.h"
 #include "highgui.h"
 #include "cxcore.h"
/*
The purpose of this program is to show an example of THRESHOLDING.
*/

int _tmain(int argc, _TCHAR* argv[])
{
IplImage* src = cvLoadImage("D:\\document\\Study\\university of     technology\\semester_8\\Computer Vision\\Pics for test\\black-white 4.jpg");
IplImage* dst = cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,3);
IplImage* temp1 = cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1);
IplImage* temp2 = cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1);
cvCvtColor(src,temp1,CV_RGB2GRAY);
cvSobel(temp1,temp2,0,1,3);
cvMerge(temp2,temp2,temp2,NULL,dst);
cvNamedWindow("src",1);
cvNamedWindow("dst",1);

cvShowImage("src",src);
cvShowImage("dst",temp2);

cvWaitKey(0);

cvReleaseImage(&src);
//cvReleaseImage(&dst);
cvDestroyAllWindows();
return 0;
}

当我运行它时,会出现如下图所示的警告: 在此处输入图像描述

但是如果我仍然点击“countinue”按钮,结果就会显示出来! 在此处输入图像描述

希望有人能给我一个解释!

4

2 回答 2

1

结果是正确的。程序的描述不是。您的 xorder=0 和 yorder=1 这意味着您正在检测 y 方向的一阶导数。图像中的白色像素对应于可以通过垂直导数检测到的边界,即尽可能接近水平边界。这就是为什么几乎没有检测到垂直线的原因。

CvSobel 本身与阈值无关。CvSobel 是一个用于寻找边界和轮廓的函数。阈值化是最常见的从灰度图像创建黑白图像的操作。它也被称为图像二值化。

如果要对图像进行阈值处理,请从 cvThreshold 和 cvAdaptiveThreshold 开始。

于 2013-03-14T18:58:48.257 回答
0

我已经修好了,这是我的代码:

 // Image Processing.cpp : Defines the entry point for the console application.
 //
 //Save an available image.
 #include "stdafx.h"
 #include "cv.h"
 #include "highgui.h"
 #include "cxcore.h"
 /*
 The purpose of this program is to show an example of Sobel method.
 */

 int _tmain(int argc, _TCHAR* argv[])
 {
IplImage* src = cvLoadImage("D:\\document\\Study\\university of technology\\semester_8\\Computer Vision\\Pics for test\\black-white 4.jpg");
IplImage* dst = cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1);
IplImage* dst_x = cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1);
IplImage* dst_y = cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1);
IplImage* temp1 = cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1);
IplImage* temp2 = cvCreateImage(cvGetSize(src),IPL_DEPTH_16S,1);

cvCvtColor(src,temp1,CV_RGB2GRAY);  

cvSobel(temp1,temp2,0,1,3);
cvConvertScale(temp2,dst_y,1.0,0);

cvSobel(temp1,temp2,1,0,3);
cvConvertScale(temp2,dst_x,1.0,0);

//k nen dao ham cung luc theo x va y ma nen dao ham rieng roi dung ham cvAdd.
//cvSobel(temp1,temp2,1,1,3);
//cvConvertScale(temp2,dst,1.0,0);

cvAdd(dst_x,dst_y,dst,NULL);

cvNamedWindow("src",1);
cvNamedWindow("dst",1);
cvNamedWindow("dst_x",1);
cvNamedWindow("dst_y",1);

cvShowImage("src",src);
cvShowImage("dst",dst);
cvShowImage("dst_x",dst_x);
cvShowImage("dst_y",dst_y);

cvWaitKey(0);

cvReleaseImage(&src);
cvReleaseImage(&dst);
cvReleaseImage(&temp1);
cvReleaseImage(&temp2);
cvDestroyAllWindows();
return 0;
 }
于 2013-03-15T13:58:31.627 回答