아래 코드에서 객체의 색상이 녹색이고 주위에 윤곽선을 그려 냈습니다. 그 정보를 가지고도 모양 모서리를 찾고 자르기를 원하지만 코드에서 사용하지 않은 ConvexHull 함수와 관련된 오류가 발생합니다. 내가 작성한 코드는 날이 오류를 제공 3.2.0cv2.minAreaRect의 오류가 발생했습니다. 사용하지 않은 convex hull 함수와 관련된 오류가 발생합니다.
파이썬 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()
내 코드입니다 잠시 조용하게 해결하십시오
도움이 되셨다면
감사합니다. 사전
- 샘
당신이 만들고있는 실수는 당신이 윤곽을 예상하는 기능에 윤곽의 배열을 전달하는 것입니다
"rotatedRect"는 _rotating caliper_ 알고리즘을 사용합니다.이 알고리즘은 아마도 convex hull code와 함께 구현됩니다. 반드시 : 1) 빈 벡터를 rotateRect에 전달하지 않고 벡터가 int (CV_32S) 또는 float (CV_32F)인지 확인하십시오. 또한 점 배열 (등고선)을 전달하지 말아야하지만, 점 배열 (예 : cnt) – Miki