32

Python で OpenCV を使用して、画像 (ndarray) 内のキャニー エッジを計算しようとしています。

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)

ここで、画像は 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 に答える