2011-06-03 21 views
5

Estoy usando python-openCV. Cuando se utiliza la detección de bordes de Sobel I conseguir el error siguiente afirmación:openCV: Detección de borde Sobel me da error de aserción

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

I crear el dest usando CreateImage() y que tiene el mismo tamaño y canales como src. Además, la profundidad de src y dest es IPL_DEPTH_8U. También intenté cargar la imagen usando LoadImageM() para que las constantes sean del tipo CV_* pero eso no ayudó.

También me suceda a descubrir que es IPL_DEPTH_8U == CV_8Ufalse.

+0

Sí, he encontrado este error yo mismo. Me encanta OpenCV, pero odio sus mensajes de error. Este es increíblemente inútil, especialmente para principiantes, pero básicamente significa que sus imágenes de origen y destino no tienen el mismo formato (por ejemplo, diferentes dimensiones de píxeles o diferente número de canales). – Cerin

Respuesta

5

he encontrado la solución un poco complicado para los principiantes a 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) 

Lo importante a destacar es que los formatos de imagen necesarios para las operaciones no están claramente documentados en las referencias de la API y se debe prestar una atención muy cuidadosa a los errores generados