OpenCVのverによる関数の返り値の数の違い
OpenCVのverによる関数の返り値の数の違い
OpenCVのverの違いで返り値の数が異なり、エラーを吐いていました。
返り値の数がまさかverで異なる...という意識がなく、ドハマりしたので、経験をシェア。
◆問題のコード
#輪郭を抽出
cnts = cv2.findContours(im2, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)[1]#返り値は[1]の値を返す
#抽出した枠を描画
for pt in cnts:
x, y, w, h = cv2.boundingRect(pt)
#大きすぎたり小さすぎる領域を除去
if w<30 or w >200: continue
print(x,y,w,h) #結果を出力
cv2.rectangle(img, (x,y), (x+w,y+h),(255,0,255),2)
◆エラー内容
error: (-215:Assertion failed) npoints >= 0 && (depth == CV_32F || depth == CV_32S)
in function 'cv::pointSetBoundingRect'
◆原因
openCVのversionによって、cv2.findContours関数の返り値の数は違うようです。
◆対策内容
修正前
#輪郭を抽出
cnts = cv2.findContours(im2, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)[1]#返り値は[1]の値を返す
修正後
#輪郭を抽出
cnts = cv2.findContours(im2, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)[0]#返り値は[0]の値を返す
◆結果
上記の修正により輪郭情報を正しく描画する処理が通るようになりました
花びらの輪郭を2値化後の画像から抽出するプログラムです。