2012-10-28 53 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

相關問題