2013-09-30 58 views
10

我想使用OpenCV和Python计算图像(ndarray)中的Canny边缘。使用OpenCV的2D图像中的深度错误Python

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

输出:

(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 

出于某种原因,我得到上述错误。任何想法为什么?

+0

您可能需要将数据类型转换为float(CV_32F),因为canny做了高斯过滤(如果OpenCV使用Filter2D)需要float数据输入。 – jgmao

+0

我试图转换为float32和整数,而不是运气。我也试过:slice2 = cv2.GaussianBlur(slice1,(5,5),1) slicecanny = cv2.Canny(slice2,1,100) – jmerkow

+0

在你的错误输出中:error:(-215)src.depth()==函数Canny中的CV_8U。可能是我完成了错误的方向。你有没有尝试转换为CV_8U作为输入(不是整数,因为整数不是UInt8)。 – jgmao

回答

0

您可以解决此错误通过保存slice1到一个文件,然后阅读它

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

这还不是最完美的解决方案,但它解决了这个问题对我来说

17

Slice1需要被铸造或创建为uint8。 CV_8U只是数据类型uint8的别名。

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