2017-11-14 3 views
0

画像にトップハットの形態変換をしようとしていますが、何らかの理由で期待された出力が得られません。openCV3:opencvで画像を形態学的に変換すると期待される出力が得られません

# Top Hat: difference between input image and opening 
kernel = np.ones((5,5),np.float32)/25 
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel) 
plt.subplot(121),plt.imshow(img, cmap='gray'),plt.title('Original') 
plt.xticks([]), plt.yticks([]) 
plt.subplot(122),plt.imshow(tophat, cmap='gray'),plt.title('Top Hat') 
plt.xticks([]), plt.yticks([]) 
plt.show() 

は私が

What I am getting

EDITを取得しています何

What is expected

を期待されているもの:カーネルを追加しました。

+0

私は 'kernel'の値が表示されません。その変数の値に関係なく同じ結果が得られますか? – MrName

+0

入力ファイルをアップロードし、実行可能コード( 'kernel'値)を投稿してください。 –

+0

はカーネルを更新しました。 – Coddy

答えて

1
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, ksize=(9,9)) 
tophat = cv2.morphologyEx(image, cv2.MORPH_TOPHAT, kernel) 

result

編集:詳細については

以下をご覧ください:

https://docs.opencv.org/3.3.1/d9/d61/tutorial_py_morphological_ops.html

https://docs.opencv.org/3.3.1/d4/d86/group__imgproc__filter.html#gac342a1bb6eabf6f55c803b09268e36dc

Iterations vs. Kernel Size in Morphological Operations (OpenCV)

+0

これはうまくいきましたが、私はここで何が起こっているのか分かりますか? – Coddy

+0

@Coddy編集を参照してください。 – zindarod

0

カーネルを正規化する必要がありますか? カーネルから25を除算してみます。

形態カーネルは、「1」と「0」で構成されています。したがって、正規化は必要ありません。 CV_8UC1型でも正常に動作します。

+0

いいえ、それは役に立ちません。 – Coddy

+0

カーネルのサイズを調整する必要があるかもしれません – yapws87

+0

イメージサイズは?あなたのカーネルが大きすぎると、小さすぎてMORPH_OPEN操作に何もしないかもしれません。 – yapws87

関連する問題