6

そのため、Python と opencv2 を使用してバイナリ (実際にはグレースケール、8 ビット、バイナリとして使用) 画像を生成し、少数のポリゴンを画像に書き込み、カーネルを使用して画像を膨張させています。ただし、使用するカーネルに関係なく、ソース イメージと宛先イメージは常に同じになります。何かご意見は?

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

ありがとう!

4

1 に答える 1

8

したがって、問題はカーネルとイメージの両方の作成にあることがわかりました。openCV は'uint8'、カーネルとイメージの両方のデータ型として期待していると思います。この特定のケースでは、カーネルを で作成しました。dtype='int'デフォルトは'int64'です。さらに、画像を'int8'ではなくとして作成しました'uint8'。どういうわけか、これは例外をトリガーしませんでしたが、拡張が驚くべき方法で失敗しました。

上記の2行を次のように変更します

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

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

問題を修正し、今ではEUREKA! 万歳!

于 2012-07-02T19:02:53.510 に答える