Ответ 1
Slice1 нужно будет выставить или создать как uint8. CV_8U является просто псевдонимом для типа данных uint8.
import numpy as np
slice1Copy = np.uint8(slice1)
slicecanny = cv2.Canny(slice1Copy,1,100)
Я пытаюсь вычислить Canny Edges в изображении (ndarray), используя OpenCV с 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
По какой-то причине я получаю вышеуказанную ошибку. Любые идеи, почему?
Slice1 нужно будет выставить или создать как uint8. CV_8U является просто псевдонимом для типа данных uint8.
import numpy as np
slice1Copy = np.uint8(slice1)
slicecanny = cv2.Canny(slice1Copy,1,100)
Вы можете обойти эту ошибку, сохранив slice1 в файл, а затем прочитав его
from scipy import ndimage, misc
misc.imsave('fileName.jpg', slice1)
image = ndimage.imread('fileName.jpg',0)
slicecanny = cv2.Canny(image,1,100)
Это не самое элегантное решение, но оно решило проблему для меня.
Вы можете просто сделать:
(image*255).astype(np.uint8)
Здесь я рассматриваю, что изображение является массивом numpy, а np обозначает numpy. Я надеюсь, что это может помочь кому-то!