Python OpenCV: 识别图像中的黑色矩形
本文介绍如何使用Python OpenCV库识别图像中的黑色矩形,并获取其坐标信息。
识别黑色矩形的步骤:
- 将图像转换为HSV颜色空间: OpenCV的
cv2.cvtColor()函数可以将BGR图像转换为HSV颜色空间。 - 根据黑色的HSV范围进行颜色过滤: 通过
cv2.inRange()函数,根据定义的HSV范围创建掩码,将图像中符合范围的颜色保留,其余部分变为黑色。 - 寻找轮廓: 使用
cv2.findContours()函数寻找掩码图像中的轮廓。 - 按轮廓面积排序: 使用
sorted()函数将轮廓按面积大小排序,以便获取第二大的轮廓。 - 获取第二大轮廓的外接矩形: 使用
cv2.boundingRect()函数获取第二大轮廓的外接矩形,并获取其坐标信息。 - 绘制矩形: 使用
cv2.rectangle()函数在原始图像上绘制第二大矩形。
代码示例:
import cv2
import numpy as np
frame = cv2.imread('image.jpg')
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) # 将帧转换为HSV颜色空间
# 定义黑色的HSV范围
lower_black = np.array([0, 0, 0])
upper_black = np.array([180, 255, 30])
mask = cv2.inRange(hsv, lower_black, upper_black) # 根据HSV范围进行颜色过滤
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 寻找轮廓
contours = sorted(contours, key=cv2.contourArea, reverse=True) # 按轮廓面积排序
if len(contours) > 1:
second_largest_contour = contours[1] # 获取第二大的轮廓
x, y, w, h = cv2.boundingRect(second_largest_contour) # 获取轮廓的外接矩形
x1, y1 = x, y
x2, y2 = x + w, y
x3, y3 = x + w, y + h
x4, y4 = x, y + h
x_center = (x1 + x2) / 2
y_center = (y1 + y3) / 2
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2) # 在原始图像上绘制第二大矩形
cv2.imshow('Second Largest Rectangle', frame) # 显示带有矩形的图像
print(f'x1: {x1}, y1: {y1}')
print(f'x2: {x2}, y2: {y2}')
print(f'x3: {x3}, y3: {y3}')
print(f'x4: {x4}, y4: {y4}')
cv2.waitKey(0)
cv2.destroyAllWindows()
注意:
- 黑色的HSV范围[0, 0, 0]到[180, 255, 30]只是一个示例,您可能需要根据实际情况调整这些值以更好地适应您的图像。
- 此代码识别的是图像中第二大的黑色矩形,您可以根据需要修改代码以识别其他矩形。
希望本文能够帮助您了解如何使用Python OpenCV库识别图像中的黑色矩形。如果您还有其他问题,请随时提出。
原文地址: https://www.cveoy.top/t/topic/fxxP 著作权归作者所有。请勿转载和采集!