2012-06-30 11 views
6

私はpythonとopencv2でバイナリ(よくグレースケール、8ビット、バイナリとして使用)イメージを生成し、少数のポリゴンをイメージに書き込み、その後カーネルを使ってイメージを拡大します。しかし、私が使っているカーネルにかかわらず、私のソースとデスティネーションのイメージは常に同じになります。何かご意見は?cv2 dilateが実際に画像に影響を与えないのはなぜですか?

from matplotlib import pyplot 
import numpy as np 
import cv2 

binary_image = np.zeros(image.shape,dtype='int8') 
for rect in list_of_rectangles: 
    cv2.fillConvexPoly(binary_image, np.array(rect), 255) 
kernel = np.ones((11,11),'int') 
dilated = cv2.dilate(binary_image,kernel) 
if np.array_equal(dilated, binary_image): 
    print("EPIC FAIL!!") 
else: 
    print("eureka!!") 

私はすべてEPIC FAILです!

ありがとうございます!

答えて

8

したがって、問題はカーネルとイメージの両方が作成されていることが判明しました。私はopenCVがカーネルと画像の両方のデータ型として'uint8'を期待していると思います。この例では、dtype='int'というカーネルを作成しました。デフォルトは'int64'です。さらに、私はではなく、'uint8'というイメージを作成しました。どういうわけかこれは例外を引き起こさなかったが、驚くべき方法で失敗を引き起こした。

binary_image = np.zeros(image.shape,dtype='uint8') 

kernel = np.ones((11,11),'uint8') 

に上記の2行を変更

は、問題を修正し、今私はEUREKAを入手します!やめ!

関連する問題