前提・実現したいこと
opencvのcanny法でエッジを検出して、その数をカウントしようと試みています。
参考サイトのコードを参考にコードを書きましたが下記エラーが発生してしまいます。
このエラーメッセージは、おそらく閾値指定のフィルタリングの際の画像がグレースケールじゃない事が問題だと思うのですが、どうすればこの問題を解決してカウントできるのかわかりません。
よろしくお願いします。
発生している問題・エラーメッセージ
FindContours supports only CV_8UC1 images
該当のソースコード
python
1canny2_color = (20, 255, 63) 2canny_image_PIL_RGBA.paste(Image.new("RGB", canny_image_PIL_RGBA.size, canny2_color), mask=mask) 3image2 = cv2.cvtColor(np.asarray(canny_image_PIL_RGBA), cv2.COLOR_RGBA2BGRA) 4# ↑ここまでリンク先のコードと同じ(一部だけ記載) 5 6# 閾値指定によるフィルタリング 7_, threshold = cv2.threshold(image2, 240, 255, cv2.THRESH_BINARY) 8# 輪郭を抽出 9contours, _ = cv2.findContours(threshold, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) 10font = cv2.FONT_HERSHEY_DUPLEX 11# 数の変数 12num = 0 13# 数を数える 14for cnt in contours: 15 approx = cv2.approxPolyDP(cnt, 0.01*cv2.arcLength(cnt, True), True) 16 cv2.drawContours(image2, [approx], 0, (0), 2) 17 x = approx.ravel()[0] 18 y = approx.ravel()[1] 19 20 if len(approx) >= 3: 21 num += 1 22 cv2.putText(image2, "No.{}".format(num), (x, y), font, 0.8, (0)) 23 24# 画像を出力 25cv2.imwrite('xxx_xxx.png', image2)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/02/17 06:13