用于2019电赛识别黄色异物,根据题目需求,要识别出黄色的矩形,并拍出清晰的照片。
函数如下,
def detect_yellow_rectangles(image):
# 将图像转换为HSV格式
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
cX = 0
cY = 0
area = 0
# 定义黄色的HSV范围
lower_yellow = np.array([30, 110, 85])
upper_yellow = np.array([50, 255, 255])
# 创建黄色的掩码
mask = cv2.inRange(hsv, lower_yellow, upper_yellow)
# 对图像进行二值化处理
_, thresh = cv2.threshold(mask, 127, 255, 0)
cv2.imshow("er", thresh)
# 寻找轮廓
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 遍历所有轮廓
for contour in contours:
# 计算轮廓的中心点
M = cv2.moments(contour)
if M["m00"]:
cX += int(M["m10"] / M["m00"])
cY += int(M["m01"] / M["m00"])
cY /= 2
cX /= 2
# 计算轮廓面积
area += cv2.contourArea(contour)
# 计算轮廓的近似多边形
epsilon = 0.02 * cv2.arcLength(contour, True)
approx = cv2.approxPolyDP(contour, epsilon, True)
# 如果近似多边形有4个顶点,我们认为它是一个矩形
if len(approx) == 4:
# 画出轮廓
cv2.drawContours(image, [approx], -1, (0, 255, 0), 2)
#返回黄色矩形的位置和面积方便判断图像是否能够清晰
return image, cX, cY,area