2012-10-28 52 views
0

我正在做一些非常基本的边缘检测的东西。我的部分实现涉及将自定义Image类复制到cv :: Mat,然后复制回Image。我正在使用this article作为我的指南,以获取边缘检测和轮廓工作(未在当前列表中显示)。在此示例中,PerturbedBorderFilter子类为Image。以下是我有:cv :: Canny抛出不匹配/不支持的格式异常

void PerturbedBorderFilter::performFilter(const Image& src) 
{ 
    int h = src.Height(), w = src.Width(); 
    cv::Mat 
    orig(h, w, CV_32FC3), 
    cannyOutput(h,w,CV_32FC1), 
    origGray(h,w,CV_32FC1); 

    src.copyTo(orig); 

    cv::cvtColor(orig, origGray, CV_RGB2GRAY); 
    cv::blur(origGray, origGray, cv::Size(3,3)); 
    cv::Canny(origGray, cannyOutput, 0.1, 0.2, 3); 

    copyFrom(cannyOutput); 
} 

我结束了这种运行时错误:

OpenCV Error: Unsupported format or combination of formats() in cvCanny, file /build/buildd/opencv-2.3.1/modules/imgproc/src/canny.cpp, line 67 
terminate called after throwing an instance of 'cv::Exception' 
    what(): /build/buildd/opencv-2.3.1/modules/imgproc/src/canny.cpp:67: error: (-210) in function cvCanny 

从我可以告诉,“origGray”和“cannyOutput”共享相同的类型,深度和通道计数。我不知道还有什么我应该检查。

如果以某种方式执行copyTo()和copyFrom()很重要,我也可以给出这些。

一些额外的信息:

  1. 类图像的原始颜色空间是RGB,32位浮点深度,具有值[0,1]。
  2. 目前,copyTo()将图像上下颠倒但是完好无损。我认为这必须是无关的,但谁知道,也许它是有用的...

回答

5

cv::Canny仅支持CV_8U图像深度。

+0

谢谢!这是我的问题......是的,它在文档中说得很对。哎呀。 – OEP

相关问题