2016-05-06 6 views
0

を減らし、輪郭を滑らかにする: contourOpenCVのは、どのようにあなたがここに見ることができることを、私は画像の輪郭を抽出し、ノイズ

しかし、それはいくつかのノイズを持っています。 どのようにノイズを滑らかにすることができますか?私は私が私が使用した enter image description here

オリジナル画像を意味したいのか明確にするためにクローズアップしました: enter image description here

コード:

rMaskgray = cv2.imread('redmask.jpg', cv2.CV_LOAD_IMAGE_GRAYSCALE) 
(thresh, binRed) = cv2.threshold(rMaskgray, 50, 255, cv2.THRESH_BINARY) 

Rcontours, hier_r = cv2.findContours(binRed,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_SIMPLE) 
r_areas = [cv2.contourArea(c) for c in Rcontours] 
max_rarea = np.max(r_areas) 
CntExternalMask = np.ones(binRed.shape[:2], dtype="uint8") * 255 

for c in Rcontours: 
    if((cv2.contourArea(c) > max_rarea * 0.70) and (cv2.contourArea(c)< max_rarea)): 
     cv2.drawContours(CntExternalMask,[c],-1,0,1) 

cv2.imwrite('contour1.jpg', CntExternalMask) 
+0

あなたはこれを作成するために使用されるコードを投稿してもらえますか? –

+0

@MartinEvans編集済み! – marco

+0

cv2.CHAIN_APPROX_SIMPLEをcv2.CHAIN_APPROX_NONEで置き換えるとどうなりますか? – tfv

答えて

1

は、OpenCVの3.1.0にアップグレードしてください。以下に示すように新しいバージョンのいくつかのコードを適用した後、私はOpenCVバージョン3.1.0でそれを試しましたが、あなたが説明している効果は見られませんでした。

import cv2 
import numpy as np 

print cv2.__version__ 

rMaskgray = cv2.imread('5evOn.jpg', 0) 
(thresh, binRed) = cv2.threshold(rMaskgray, 50, 255, cv2.THRESH_BINARY) 

_, Rcontours, hier_r = cv2.findContours(binRed,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_SIMPLE) 
r_areas = [cv2.contourArea(c) for c in Rcontours] 
max_rarea = np.max(r_areas) 
CntExternalMask = np.ones(binRed.shape[:2], dtype="uint8") * 255 

for c in Rcontours: 
    if((cv2.contourArea(c) > max_rarea * 0.70) and (cv2.contourArea(c)< max_rarea)): 
     cv2.drawContours(CntExternalMask,[c],-1,0,1) 

cv2.imwrite('contour1.jpg', CntExternalMask) 

enter image description here

+0

私はまだいくつかの問題があります: https://dl.dropboxusercontent.com/u/710615/externalpcb.jpg – marco

+0

これについての解決策はありますか?申し訳ありません、同じ問題を抱えている古い質問です。 @marco –

+0

@ジョナサン:上記のように、問題は上記のOpenCVバージョンではなくなっているようです。これがあなたには当てはまらない場合は、例を投稿してください。 – tfv

関連する問題