以下のコードでは、オブジェクトの色が緑で輪郭を描いているかどうかを調べました。その情報を使って、シェイプのコーナーを見つけて切り抜きたいと思いますが、コードで使用していないConvexHull関数に関するエラーが発生します。私は私が書いたコードは私にこのエラーが発生します3.2.0cv2.minAreaRectでエラーが発生しました。私が使用していない凸包関数に関連したエラーを返します。
のpython 3とOpenCVのを使用している
ここTraceback (most recent call last):
File "/home/pi/Desktop/SelfDrivingCar/code/picamsense2.py", line 29, in <module>
points = cv2.minAreaRect(contour)
error: /home/pi/opencv/opencv-3.2.0/modules/imgproc/src/convhull.cpp:136: error: (-215) total >= 0 && (depth == CV_32F || depth == CV_32S) in function convexHull
は、私が探ししようとしている
from picamera import PiCamera
import time
import cv2
import numpy as np
camera = PiCamera()
camera.start_preview()
time.sleep(5)
camera.capture('/home/pi/Desktop/piImage/image.jpg')
camera.stop_preview()
img = cv2.imread('/home/pi/Desktop/piImage/image.jpg', 1)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower = np.array([46, 100, 100])
upper = np.array([86, 255, 255])
mask = cv2.inRange (hsv, lower, upper)
blur = cv2.GaussianBlur(mask, (7,5),0)
erosion =cv2.erode(blur, (5,5), iterations = 3)
contour =np.array(cv2.findContours(erosion, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)[1])
cv2.drawContours(img, contour, -1, (0,255,0), 3)
for cnt in contour:
approx = cv2.approxPolyDP(cnt, 0.04*cv2.arcLength(cnt, True), True)
if len (approx)== 3:
print "triangle"
elif len (approx) == 4 :
print "quadrilateral"
elif len(approx) > 4:
print "circle"
points = cv2.minAreaRect(contour)
points = cv2.boxPoints(points)
points = np.int0(points)
for p in points :
pt = (p[0],p[1])
print pt
print points
cv2.imshow('eroded', blur)
cv2.imshow('original', img)
while (1):
k = cv2.waitKey(0)
if(k == 27):
break
cv2.destroyAllWindows()
私のコードです今
すべてのヘルプは
おかげでいただければ幸い静かないくつかの時間を修正
-SAM
"rotatedRect"は、おそらく凸包コードとともに実装された_rotating caliper_アルゴリズムを使用します。 1)空ベクトルをrotateRectに渡していないこと、そしてベクトルがint(CV_32S)またはfloat(CV_32F)であることを確認してください。また、ポイント(等高線)の配列の配列を渡すべきではなく、ポイントの配列(cntのような) – Miki