2013-09-30 2 views
10

OpenCV를 사용하여 이미지 (ndarray)에서 Canny Edges를 계산하려고합니다.OpenCV Python에서 2D 이미지의 심도 오류

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

당신은 (OpenCV의이 Filter2D를 사용하는 경우) 부동 소수점 데이터의 입력을 요구 가우스 필터링을 할 영리한 이후 (CV_32F)를 떠 데이터 형식을 변환해야 할 수도 있습니다. – jgmao

+0

나는 float32와 정수로 변환하려고했으나 운이 아니었다. 나는 또한 시도 : slice2 = cv2.GaussianBlur (slice1, (5,5), 1) slicecanny = cv2.Canny (slice2,1,100) – jmerkow

+0

오류 출력 : 오류 : (-215) src.depth() == CV_8U는 Canny의 기능입니다. 나는 잘못된 방향으로 완전 해졌을 수도 있습니다. 입력으로 CV_8U로 변환하려고 했습니까 (정수가 UInt8이 아니기 때문에 정수가 아님). – jgmao

답변

0

당신이 가장 우아한 해결책이 아니라 그것을

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

를 읽고 다음 파일로 slice1을 절약하여이 오류를 해결할 수 있습니다,하지만 나를 위해 문제를 해결

17

Slice1가 필요합니다 캐스팅되거나 uint8로 작성됩니다. CV_8U는 데이터 유형 uint8의 별명입니다.

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