9

Windows の python 2.7.3 で opencv 2.4.3 を使用すると、興味深いエラーが発生します。drawContours を使用しようとすると、最初に輪郭をピクル/アンピクルしない限り、「TypeError: 輪郭データ タイプ = 5 はサポートされていません」というエラーが表示されます。

これは機能しません (「TypeError: 等高線データ型 = 5 はサポートされていません」というメッセージが表示されます):

noBg = cv2.blur(src, (5,5))
noBg = cv2.inRange(noBg, np.array([80, 0, 200], np.uint8), np.array([255, 50, 255], np.uint8)) 
noBg = np.invert(noBg)
contours, hierarchy = cv2.findContours(noBg, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(src, contours, -1, (0,255,0), 3) 

しかし、これはうまくいきます:

noBg = cv2.blur(src, (5,5))
noBg = cv2.inRange(noBg, np.array([80, 0, 200], np.uint8), np.array([255, 50, 255], np.uint8)) 
noBg = np.invert(noBg)
contours, hierarchy = cv2.findContours(noBg, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

tmp = cPickle.dumps(contours)    
contours = cPickle.loads(tmp)

cv2.drawContours(src, contours, -1, (0,255,0), 3) 

他の誰かがこの動作を見たことがありますか、それとも明らかな何かが欠けていますか? 私はpython/opencvが初めてなので、そうかもしれません。

編集:これを私の Mac でテストしたところ、どちらの場合も問題なく動作しました。たぶんWindowsの問題でしょうか?

4

3 に答える 3

8

opencv 2.4.2 にダウングレードすると、これが機能します。2 週間前にリリースされたばかりの 2.4.3 のバグのようです。

于 2012-11-15T11:02:48.960 に答える
4

OpenCV 2.4.3 を取得した後、findContours および凸包から輪郭を使用するときに同じ問題が発生しました。ダウングレードしたくなかったので、contours 配列要素を int にキャストすると、一時的に問題が解決します。

contours, _ = cv2.findContours(noBg,cv2.RETR_LIST ,cv2.CHAIN_APPROX_SIMPLE,offset = (0,0))
hull_contour = cv2.convexHull(contours[0].astype('int'))
于 2012-11-19T23:02:06.597 に答える