Pythonのopencvを使った外観検査について質問です。以下のコードを使って画像を取得すると複数個ある物体の輪郭のうち1つにしか処理画像が表示されません。すべての物体の輪郭それぞれに処理を実行し表示させるにはどこを直せばよいですか。コードの該当しそうな箇所を書いておきます。ご教授ください。ちなみに私はプログラミング初心者です。import cv2import osimport numpy as npfrom datetime import datetime・・途中省略・・img=cv2.imread(path) gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) _,binary=cv2.threshold(gray,50,255,cv2.THRESH_BINARY) contours,hierarchy=cv2.findContours(binary,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_SIMPLE) result_image=cv2.cvtColor(binary,cv2.COLOR_GRAY2BGR) monokuro_img=np.ones_like(img)*255 l_area=300 s_area=200 for i in contours: area = cv2.contourArea(i) if area\u0026gt;l_area: color=(0,0,255) elif area\u0026gt;s_area: color=(0,255,0) else: color=(0,0,0) cv2.drawContours(img,[i],-1,color,2) cv2.imshow('Path',img)・・途中省略・・cap.release()cv2.waitKey(0)cv2.destroyAllWindows()

Windows

1件の回答

回答を書く

1040183

2026-02-20 20:50

+ フォロー

for文の中でcv2.imshow()しているのが原因です。imshowは「最後に表示した1枚」だけが画面に残るので、輪郭ごとに更新しても最終的に最後の輪郭の結果しか見えません。

対処としては、for文の中ではdrawContoursで全部の輪郭を1枚の画像に描き続けて、for文が終わったあとに1回だけimshowしてください。つまりcv2.imshow(‘Path’, img)をforの外に移動します。

また、元画像imgに描くと上書きされるので、表示用にimg.copy()を作ってそこに描くほうが安全です。

うったえる有益だ(0シェアするブックマークする

Copyright © 2026 AQ188.com All Rights Reserved.

博識 著作権所有