web-dev-qa-db-ja.com

openCV 3のcontourAreaとの互換性の問題

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)
18
YNWA

Opencv 3 APIバージョンでは、cv2.findContours()は3を返します objects

  • 画像
  • 輪郭
  • 階層

したがって、ステートメントを次のように書き換える必要があります。

image, contours, hierarchy = cv2.findContours(im_bw.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
31
ZdaR

この問題は、異なる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を使用する方法

2
Qin Heyang