2011-06-03 2 views
5

Я использую python-openCV. При использовании обнаружения края Собеля я получаю следующее сообщение об ошибке утверждения:openCV: обнаружение края Sobel дает мне ошибку утверждения

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)) 

Я создаю dest с помощью CreateImage() и он имеет такое же размер и каналы как src. Также глубина обоих src и dest - IPL_DEPTH_8U. Я также попытался загрузить изображение, используя LoadImageM(), так что константы имеют вид CV_*, но это не помогло.

Также я обнаружил, что IPL_DEPTH_8U == CV_8U является false.

+0

Да, я сам столкнулся с этой ошибкой. Мне нравится OpenCV, но я ненавижу их сообщения об ошибках. Это невероятно бесполезно, особенно для новичков, но в основном это означает, что исходные и целевые изображения не имеют одинакового формата (например, разные размеры пикселей или различное количество каналов). – Cerin

ответ

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 и следует обратить очень пристальное внимание к генерируемым ошибкам.

Смежные вопросы