简体   繁体   中英

Depth error in 2D image with OpenCV Python

I am trying to compute the Canny Edges in an image (ndarray) using OpenCV with Python.

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

Output:

(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

For some reason I get the above error. Any ideas why?

Slice1 will need to be casted or created as a uint8. CV_8U is just an alias for the datatype uint8.

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

You can work around this error by saving slice1 to a file and then reading it

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

This is not the most elegant solution, but it solved the problem for me

In order to avoid losing precision while changing the data type to uint8, you can first adapt the scale to the 255 format just doing:

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

Here I'm considering that image is a numpy array and np stand for numpy. I hope it can help someone!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM