OpenCV を使用して、Web カメラで撮影した写真を分析しています。次に、画像をトリミングして、白黒のみに変換しました。次に、画像内のすべての輪郭を見つけて、最大の輪郭を特定したいと考えています。
Ubuntu OS のターミナル ウィンドウでコードを実行しています。
関連するコードは次のとおりです。
num_contours, contours = cvFindContours(contourimg, # num_contours - # of contours
cvCreateMemStorage(0), # and contours are the actual contours
sizeof_CvContour) # cvFindContours() destroys contourimg
max_size = float("-inf")
max_contour = None
for contour in contours.hrange(): # contours.hrange() returns a list of all contours
print contour
size = abs(cvContourArea(contour)) # calculates the area of the bounding rectangle
if size > max_size:
max_size = size # update max_size if larger contour found
max_contour = contour # update max_contour if larger contour found
コードを実行すると、さまざまなエラーが発生します。1 つはセグメンテーション違反で、Python を終了して端末に戻りますが、もう 1 つは次のとおりです。
File "fitness.py", line 74, in boundingimg
size = abs(cvContourArea(contour)) # calculates the area of the bounding rectangle
File "/usr/lib/pymodules/python2.6/opencv/cv.py", line 6741, in cvContourArea
return _cv.cvContourArea(*args)
RuntimeError: openCV Error:
Status=Bad argument
function name=cvPointSeqFromMat
error message=Input array is not a valid matrix
file_name=/build/buildd/opencv-2.1.0/src/cv/cvutils.cpp
line=53
すべての輪郭の print ステートメントがあり、それらはすべて正常に動作するため、奇妙だと思います。for ループは、このエラーをスローする前に長時間続きます。この輪郭が他のすべての輪郭と何が違うのかわかりません。
また、コードが機能する場合もあります (頻繁ではありません) ため、毎回エラーが発生することはありません。