2010-05-10 101 views
2

我正在通過O'Reilly系列的「學習OpenCV」一書,嘗試執行Canny邊緣檢測示例。Canny邊緣檢測 - 灰度圖像始終顯示爲3通道,不可用?

我選擇的任何灰度圖像似乎都有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路圖像?我該如何解決這個問題?

回答

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 - 加載的圖像的具體顏色類型:如果$> 0 $,加載圖像被強制爲3通道的彩色圖像;如果爲0,則加載的圖像被強制爲灰度;如果$ < 0 $,則加載的圖像將按原樣加載(請注意,在當前實現中,alpha通道(如果有的話)會從輸出圖像中除去,例如4通道RGBA圖像將作爲RGB加載)。

+1

真棒,謝謝!我沒有意識到這個參數被拖欠了。 – cvcentral 2010-05-10 02:23:13

+0

該頁面是OpenCV的良好網頁。我之前一直使用openCV時總是使用它 – vodkhang 2010-05-10 03:00:48