如何在白色物体上(在遮罩窗口中)绘制一个矩形,该矩形出现在原始凸轮中(在框架窗口中) see image
我的代码:
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
while(1):
# Take each frame
_, frame = cap.read()
# Convert BGR to HSV
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# define range of red color in HSV
lower_blue = np.array([0,89,190])
upper_blue = np.array([180,255,255])
# Threshold the HSV image to get only red colors
mask = cv2.inRange(hsv, lower_blue, upper_blue)
# Bitwise-AND mask and original image
res = cv2.bitwise_and(frame,frame, mask= mask)
cv2.imshow('frame',frame)
cv2.imshow('mask',mask)
cv2.imshow('res',res)
k = cv2.waitKey(5) & 0xFF
if k == 27:
break
cv2.destroyAllWindows()
抱歉我的英语不好,我正在尽力改善它。
答案 0 :(得分:1)
像Tiphel所说,你可以使用cv2.findContours和cv2.drawContours。或者,在获得轮廓后,您也可以使用cv2.boundingRect()函数绘制一个框。这将返回4个参数,例如x,y,w和h。 x,y表示点,w,h分别表示矩形的高度宽度。然后,您可以使用cv2.rectangle绘制矩形。你也可以适合其他类似的形状,如椭圆,圆圈等。
i,contours,heirarchy = cv2.findContours(a_thresh,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
cont_sorted = sorted(cnts2,key = cv2.contourArea,reverse = True)[:5]
x,y,w,h = cv2.boundingRect(cont_sorted [0])
cv2.rectangle(一,(X,Y),(X + W,Y + H),(0,0,255),5)
这里,a_thresh是对输入图像进行阈值处理后的二值图像。在cv2.rectange()函数中,第一个参数对应于要绘制的图像,第四个参数指定颜色,第五个参数指定用于绘制矩形的线条的粗细。
另外,我使用'sorted'来获得前5个轮廓的大小,理想情况下我感兴趣的对象将是面积最大的对象。
您可以在线查找这些文档。我建议您浏览上面使用的所有函数的文档,以便适合您的应用程序使用它!
答案 1 :(得分:0)
使用cv2.findContours
查找被遮罩图片上的对象,然后cv2.drawContours
显示该对象。