我正在阅读O'Reilly系列中的“学习OpenCV”一书,并试图执行一个精确的边缘检测样本。
我选择的任何灰度图像似乎都有3个通道,据我所知,canny只适用于单通道图像,因此总是失败。我甚至使用OpenCV提供的图像。
这是我的代码..
IplImage* doCanny(IplImage* in, double lowThresh, double highThresh, double aperture)
{
if(in->nChannels != 1)
return(0); //canny only handles gray scale images
IplImage* out = cvCreateImage(cvSize(in->width, in->height), IPL_DEPTH_8U, 1);
cvCanny(in, out, lowThresh, highThresh, aperture);
return(out);
};
IplImage* img = cvLoadImage("someGrayscaleImage.jpg");
IplImage* out = doCanny(img, 10, 100, 3);
为什么这总是给我3通道图像?我该如何解决这个问题?
答案 0 :(得分:2)
您可以将此方法与其他参数
一起使用IplImage* cvLoadImage(const char* filename, int iscolor=CV_LOAD_IMAGE_COLOR)
#define CV_LOAD_IMAGE_COLOR 1
#define CV_LOAD_IMAGE_GRAYSCALE 0
#define CV_LOAD_IMAGE_UNCHANGED -1
默认参数是带颜色的加载图像。你要做的是用灰度加载它
这是一个例子
cvLoadImage("yourimage.jpg", CV_LOAD_IMAGE_GRAYSCALE);
以下是该方法的详细说明。您可以在此处查看更多详细信息: Open CV 2.0 References
scolor - 加载图像的特定颜色类型:if $> 0 $,加载的图像被强制为3通道彩色图像;如果为0,则加载的图像被强制为灰度;如果$< 0 $,加载的图像将按原样加载(请注意,在当前实现中,alpha通道(如果有)从输出图像中剥离,例如,4通道RGBA图像将作为RGB加载。)