2011-06-03 75 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引用清楚地记录和一个要非常小心注意以生成错误。