2017-06-13 15 views
1

image with rectanglesスキャンした画像のPython、OpenCV、および長方形

こんにちは! OpenCVを習得すると、問題が発生しました。これらのボックスを見つけられずに切り取ることはできません。私に教えてください、使用するフィルターとロジックは何ですか?

#!/usr/bin/env python 
import cv2 
import os 

img_path = os.path.join('img', '1.jpg') 
image = cv2.imread(img_path) 

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
gray = cv2.bilateralFilter(gray, 11, 17, 17) 
edged = cv2.Canny(gray, 30, 200) 

cv2.imshow('gray', gray) 
cv2.waitKey(0) 

cv2.imshow('edged', edged) 
cv2.waitKey(0) 


(_, cnts, _) = cv2.findContours(edged.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) 

for c in cnts: 
    peri = cv2.arcLength(c, True) 
    approx = cv2.approxPolyDP(c, 0.02 * peri, True) 

    if len(approx) == 4: 
     cv2.drawContours(image, [approx], -1, (0, 255, 0), 3) 


cv2.imshow('result', image) 
cv2.waitKey(0) 

この例では、ごみの多くを見つけ、すべての矩形(だけでなく、それらの背景を持つ)

EDIT: OpenСVの重複が輪郭を長方形。重複をどのように切り取ることができますか?

+0

これまでに何を試みましたか? – asongtoruin

+0

私はopencvを学び始めました。緊急の課題があります。私はcannyフィルターを使用して、次にfindContoursを使用しようとしました – ilya

+0

あなたのコードを投稿してください(あなたの投稿に編集してください) - どこが間違っているかを教えてください。 – asongtoruin

答えて

0

あなたは非常に近いですが、輪郭を繰り返しながら輪郭から近似したポリゴンの辺の数に基づいて輪郭をフィルタリングしています。輪郭領域のフィルタも追加するだけです検出されている小さい方の矩形を削除します。これは次のように行うことができます。

for c in cnts: 
    peri = cv2.arcLength(c, True) 
    approx = cv2.approxPolyDP(c, 0.02 * peri, True) 

    if len(approx) == 4 and cv2.contourArea(c) > 200: 
     cv2.drawContours(image, [approx], -1, (0, 255, 0), 3) 
+0

thx、すべてのゴミ箱がクリーニングされますが、バックグラウンドのない四角形 – ilya

関連する問題