https://blanktar.jp/blog/2015/07/python-opencv-crop-box.html
こちらのページを参考に輪郭抽出のコードを勉強しています。
実行結果がエラーになるので原因を探ってみると
Python
1 # 一部抜粋 2 while True: 3 orig = cam.read()[1] 4 5 lines = orig.copy() 6 7 # 輪郭を抽出する 8 canny = cv2.cvtColor(orig, cv2.COLOR_BGR2GRAY) 9 canny = cv2.GaussianBlur(canny, (5, 5), 0) 10 canny = cv2.Canny(canny, 50, 100) # 輪郭を抽出 11 cv2.imshow('canny', canny) 12 13 cnts = cv2.findContours(canny, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)[0]
下記は上記のうちの二行
Python
1 # ここまでは各要素にそれらしい値が入っている 2 canny = cv2.GaussianBlur(canny, (5, 5), 0)
Python
1 # ここで全要素が「0」になる 2 canny = cv2.Canny(canny, 50, 100)
Canny()を通るとnumpyの二次元配列480*640の全要素が「0」になってしまい、その後の計算に支障をきたしているようです。
原因は何なのでしょうか?ご教授お願いいたします。
###追記
エラー箇所( line 52 )
python
1 while True: 2 orig = cam.read()[1] 3 4 lines = orig.copy() 5 6 # 輪郭を抽出する 7 canny = cv2.cvtColor(orig, cv2.COLOR_BGR2GRAY) 8 canny = cv2.GaussianBlur(canny, (5, 5), 0) 9 canny = cv2.Canny(canny, 50, 100) # 輪郭を抽出 10 cv2.imshow('canny', canny) 11 12 cnts = cv2.findContours(canny, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)[0] 13 14 cnts.sort() 15 16 warp = None 1751 for i, c in enumerate(cnts): 1852 arclen = cv2.arcLength(c, True)
C:\Users\○○○\Desktop>contour_extraction.py
OpenCV Error: Assertion failed (count >= 0 && (depth == 5 || depth == 4)) in cv::arcLength, file D:\Build\OpenCV\opencv-3.3.1\modules\imgproc\src\shapedescr.cpp, line 284
Traceback (most recent call last):
File "C:\Users\○○○\Desktop\contour_extraction.py", line 52, in <module>
arclen = cv2.arcLength(c, True)
cv2.error: D:\Build\OpenCV\opencv-3.3.1\modules\imgproc\src\shapedescr.cpp:284: error: (-215) count >= 0 && (depth == 5 || depth == 4) in function cv::arcLength
###補足
質問トップにあるURLをコピペしただけなので、そちらのソースコードを見ていただけると詳しくわかると思いますが、webカメラのキャプチャからイメージを取得してます。
今回キャプチャしたものは自身の顔含むプライベートな画像(映像)であるため、大変申し訳ないですが、こちらに張り付けることはしないつもりです。
ただそのような画像(映像)を使った上でのエラーであると認識していただければ幸いです。
回答1件
あなたの回答
tips
プレビュー