2011-06-03 16 views
5

Używam python-openCV. Podczas korzystania z wykrywanie krawędzi Sobel pojawia się następujący błąd twierdzenie:openCV: wykrywanie krawędzi Sobela daje błąd potwierdzenia

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 utworzyć dest użyciu CreateImage() i ma taką samą wielkość i kanały jak src. Również głębokość src i dest to IPL_DEPTH_8U. Próbowałem również ładować obraz przy użyciu LoadImageM(), tak aby stałe były rodzaju CV_*, ale to nie pomogło.

Też się dowiaduję, że IPL_DEPTH_8U == CV_8U to false.

+0

Tak, sam napotkałem ten błąd. Uwielbiam OpenCV, ale nienawidzę ich komunikatów o błędach. Ten jest niezwykle pomocny, szczególnie dla początkujących, ale zasadniczo oznacza to, że obrazy źródłowe i docelowe nie mają tego samego formatu (np. Różne wymiary pikseli lub inna liczba kanałów). – Cerin

Odpowiedz

5

znalazłem rozwiązanie nieco trudne dla nowicjuszy do 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) 

Ważne jest, aby pamiętać, jest to, że formaty zdjęć wymagane do operacji nie są jasno udokumentowane w literaturze API i trzeba płacić bardzo baczną uwagę do generowanych błędów.

Powiązane problemy