OpenCV:跟踪扩展矩形的坐标

时间:2018-12-16 13:13:59

标签: python opencv

我有一个校准过程,我想在其中获得屏幕的最大高度和最大宽度。因此,我制作了一个不断扩大的矩形,希望通过图像处理对其进行坐标处理。始终会以一个角度查看此矩形。

我使用了一个彩色矩形在HSV范围内对其进行检测,但似乎无法正常工作。首先,我检测出绿色矩形,然后对其进行阈值处理,然后检测出精巧边缘,然后找到轮廓并过滤最大轮廓。最终近似轮廓显示在屏幕快照的“ img”标签中。

这里的问题是绿色矩形的进一步边缘显示为黑色,并且在HSV范围内未检测到。因此无法获得最大宽度和高度。即使在边缘检测中我具有矩形的左上角和右下角。

除了检测彩色矩形的HSV范围外,还有其他方法可以跟踪缩放矩形。由于矩形正在移动,因此应该存在。

代码:

video = cv2.VideoCapture('rectCalibration2.mp4')
img = np.zeros((360,640,3))
prevImg = np.zeros((360,640,3))
finalContour = []
end_time = time.time() + 15
largestArea = 5000
while(video.isOpened()):
 _, frame = video.read()
 if frame is None:
  print('ended')
  break
 frame = cv2.resize(frame, (640, 360))
 hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
 greenLower = (55, 100, 6)
 greenUpper = (70, 255, 255)
 mask = cv2.inRange(hsv, greenLower, greenUpper)
 th = cv2.adaptiveThreshold(mask,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)
 th = cv2.erode(th, None, iterations=3)
 th = cv2.dilate(th, None, iterations=3)
 edges = cv2.Canny(th,200,400)
 m, contours, hierarchy = 
 cv2.findContours(edges,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)

 largeContours = []

 for contour in contours:
   area = cv2.contourArea(contour)
   if area > largestArea:
     largestArea = area
     largeContours.append(contour)
     finalContour = contour
     img = np.zeros((360,640,3))
     cv2.drawContours(img, largeContours, -1, (255, 255, 255))
     prevImg = img

 if (prevImg is not img):
   end_time = time.time() + 15

 if time.time() > end_time:
   epsilon = 0.1 * cv2.arcLength(finalContour, True)
   approx = cv2.approxPolyDP(finalContour, epsilon, True)
   print(approx)
   prevImg = np.zeros((360,640,3))
   cv2.drawContours(prevImg,[approx],0,(255,255,255),2)
   cv2.imshow('final', prevImg)
   video.release()
   break

cv2.imshow('frame',frame) 
cv2.imshow('img', img)
cv2.imshow('edges', edges)
if cv2.waitKey(33) == ord('q'):
  video.release()
  break

Small Rectangle

Frame, Edges, Contours

“ img”标签显示的finalContour不是最大宽度和高度

0 个答案:

没有答案