2017-05-01 6 views
-1

私はこれを読んでいる:?opencvを使って、erosion/dilationではなく、connectedComponentsWithStasを使ってドットを削除する方法は?

http://www.itkeyword.com/doc/5188188731707068417/how-to-use-opencvs-connected-components-with-stats-in-python

Remove spurious small islands of noise in an image - Python OpenCV

浸食/拡張を提案し、ただ不思議それがconnectedComponectsStatsを使用して同じことを行うことが可能ですされている、私はGoogleで検索している、これらを得ました

http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_features_harris/py_features_harris.html#corner-with-subpixel-accuracy

が、これらの中から、私はドットを削除する方法を見つけ出すことはできませんので、あなたがより、それを行う方法を教えてくださいだろう事前にks!

更新: 私が本当にやりたいことは、小さなドットを削除してブロー画像から人間の形を抽出することです。あなたはこのような何か行うことができますconnectedComponentsWithStats使用

demo image

+0

statを使用すると、フラグ 'cv2.CC_STAT_AREA'を使用して、その領域に関してドットを削除できます。さらに、ドットの位置を知っていれば、重心を使うことができます。私はあなたが理解していないことをかなり得ていません。 –

+0

@ RickM。ありがとう、私は領域がploygon(非常に小さいべきである)によって生産されると思う、私はこの小さなポリゴンを取り除く方法を知らない。controidとboudariesを手に入れて、私は矩形を取り除くことができる私は正しい? –

+0

領域は輪郭の領域に対応します。必ずしも輪郭である必要はありません。あなたはドットで正確に何を意味しますか?画像をアップロードできますか? –

答えて

1

:あなたがアップロードした画像について

img = cv2.imread(directory + "canny.png") 
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
labelnum, labelimg, contours, GoCs = cv2.connectedComponentsWithStats(gray) 
for label in xrange(1, labelnum): 
    x,y,w,h,size = contours[label] 
    if size <= 50: 
     img[y:y+h, x:x+w] = 0 
cv2.imwrite(directory + "cca_image.png", img) 

を、私は結果としてこれを得た:

Result image

は、この作業を行いますあなたのために?私はconnectedComponentsWithStatsと呼ぶ前に膨張/侵食が助けになると思うが、私はそれをあなたが決めるために残す。

関連する問題