2011-06-03 76 views
5

我正在使用python-openCV。當使用Sobel邊緣檢測,我得到以下斷言錯誤:openCV:索貝爾邊緣檢測使我斷言錯誤

src.size() == dst.size() && src.channels() == dst.channels() && ((src.depth() == CV_8U && (dst.depth() == CV_16S || dst.depth() == CV_32F)) || (src.depth() == CV_32F && dst.depth() == CV_32F)) 

我使用CreateImage()創建dest並具有相同的尺寸和渠道src。 src和dest的深度也是IPL_DEPTH_8U。我也嘗試使用LoadImageM()加載圖像,以便常量是CV_*,但這並沒有幫助。

我也碰巧發現IPL_DEPTH_8U == CV_8Ufalse

+0

是的,我自己也遇到過這個錯誤。我喜歡OpenCV,但我討厭他們的錯誤消息。這對於初學者來說非常無用,尤其對於初學者來說,但基本上這意味着您的源圖像和目標圖像不具有相同的格式(例如不同的像素尺寸或不同的通道數量)。 – Cerin 2011-10-18 14:25:57

回答

5

我發現OpenCV的解決方案有點棘手新手:

src = cv.LoadImageM('src.png', cv.CV_LOAD_IMAGE_GRAYSCALE) 
dest = cv.CreateMat(src.height, src.width, cv.CV_16S) 
cv.Sobel(src, dest, 1, 1) 

需要注意的重要一點是,對於操作所需的圖像格式都不在API引用清楚地記錄和一個要非常小心注意以生成錯誤。