FindContoursから取得した輪郭の単純な面積計算を試みています。私のopenCvバージョンは3.1.0です
私のコードは:
cc = cv2.findContours(im_bw.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.contourArea(cc[0])
error: 'C:\\builds\\master_PackSlaveAddon-win32-vc12-static\\opencv\\modules\\imgproc\\src\\shapedescr.cp...: error: (-215) npoints >= 0 && (depth == CV_32F || depth == CV_32S) in function cv::contourArea\n'
カントはそれを解決しているように見えますが、findContoursの結果がcontourAreaのタイプと一致することを期待していますが、ちょうどタイプキャストされていると感じています
ありがとう:)
編集:findContoursの第2引数を取る必要があることが判明しました
im2, cc, hierarchy = cv2.findContours(im_bw.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
Opencv 3 APIバージョンでは、cv2.findContours()
は3を返します objects
したがって、ステートメントを次のように書き換える必要があります。
image, contours, hierarchy = cv2.findContours(im_bw.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
この問題は、異なるOpenCVバージョンでのcv2.findContoursの異なる戻り値が原因で発生します。
OpenCV 4.0.0では、このエラーはcv2.error: OpenCV(4.0.0) C:\projects\opencv-python\opencv\modules\imgproc\src\convhull.cpp:137: error: (-215:Assertion failed) total >= 0 && (depth == CV_32F || depth == CV_32S) in function 'cv::convexHull'
のように見える場合があります
詳細な説明と解決策はこちらにあります: OpenCVの異なるバージョンでcv2.findContoursを使用する方法