32

我正在尝试使用 OpenCV 和 Python 计算图像(ndarray)中的 Canny Edges。

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

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

4

3 回答 3

43

Slice1 需要转换或创建为 uint8。CV_8U 只是数据类型 uint8 的别名。

import numpy as np
slice1Copy = np.uint8(slice1)
slicecanny = cv2.Canny(slice1Copy,1,100)
于 2014-09-01T20:01:10.370 回答
5

为了避免在将数据类型更改为 uint8 时丢失精度,您可以首先将比例调整为 255 格式,只需执行以下操作:

(image*255).astype(np.uint8)

在这里,我认为 image 是一个 numpy 数组,而 np 代表 numpy。我希望它可以帮助某人!

于 2019-05-17T12:05:27.247 回答
1

您可以通过将 slice1 保存到文件然后读取它来解决此错误

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

这不是最优雅的解决方案,但它为我解决了问题

于 2014-05-21T15:26:50.127 回答