2013-09-30 16 views
10

Python ile OpenCV kullanarak Canny Kenarlarını bir görüntüde (ndarray) hesaplamaya çalışıyorum.OpenCV Python ile 2 boyutlu görüntüde derinlik hatası Python

slice1 = slices[15,:,:] 
slice1 = slice1[40:80,60:100] 
print slice1.shape 
print slice1.dtype 
slicecanny = cv2.Canny(slice1, 1, 100) 

Çıktı: Nedense

(40, 40) 
float64 
... 
error: /Users/jmerkow/code/opencv-2.4.6.1/modules/imgproc/src/canny.cpp:49: 
error: (-215) src.depth() == CV_8U in function Canny 

Yukarıda hatası alıyorum. Herhangi bir fikir neden?

+0

sen (OpenCV Filter2D kullanırsanız) şamandıra veri girişi gerektirir Gauss filtreleme yapmak açıkgöz beri (CV_32F) yüzer veri türüne dönüştürmek gerekebilir. – jgmao

+0

Float32'ye ve tamsayıya çevirmeyi denedim, şans değil. Ayrıca denedim: slice2 = cv2.GaussianBlur (slice1, (5,5), 1) slicecanny = cv2.Canny (slice2,1,100) – jmerkow

+0

Hata çıkışınızda: error: (-215) src.depth() == CV_8U işlevi Canny. Yanlış yönde tamamlanmış olabilirim. Giriş olarak CV_8U'ya dönüştürmeyi denediniz mi (tamsayı değil, tamsayı UInt8 değil). – jgmao

cevap

0

Bu en zarif çözüm değildir bunu

from scipy import ndimage, misc 
misc.imsave('fileName.jpg', slice1) 
image = ndimage.imread('fileName.jpg',0) 
slicecanny = cv2.Canny(image,1,100) 

okuma sonra bir dosyaya slice1 kaydetme ve bu hatanın geçici bir çözüm olabilir, ama benim için sorun çözüldü

17

Slice1 gerekecektir uint8 olarak yayınlanmalı veya oluşturulmalıdır. CV_8U, veri türü için bir takma addır.

import numpy as np 
slice1Copy = np.uint8(slice1) 
slicecanny = cv2.Canny(slice1Copy,1,100)