使用OpenCV Python在2D图像中出现深度错误

jme*_*kow 21 python opencv

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

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

输出:

(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
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我得到了上述错误.有什么想法吗?

Ros*_*oss 31

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

import numpy as np
slice1Copy = np.uint8(slice1)
slicecanny = cv2.Canny(slice1Copy,1,100)
Run Code Online (Sandbox Code Playgroud)

  • @SaleemAhmed在OP中深度缓冲区是CV_8U,这意味着单通道8位无符号整数。如果您使用像素,请识别数组数据 CV_* 的类型,然后使用适当的 np 转换函数,例如 np.ufloat32() 参见 https://docs.scipy.org/doc/numpy-1.13.0/user/ basics.types.html 了解更多 (2认同)

Tod*_*oda 9

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

(image*255).astype(np.uint8)
Run Code Online (Sandbox Code Playgroud)

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

  • 您可以使用编辑按钮来改进您的答案。评论往往不会留下来,因此您添加的内容可能会随着时间的推移而丢失。 (3认同)