opencv颜色识别
获取摄像头帧转换颜色空间从RGB到BGR(OpenCV标准,)再转换到HSV色彩空间(更适合颜色检测)如果需要修改颜色就修改上面的颜色设置范围,物体的坐标位于标记物体处,xywh等,可以发送给设备。查找轮廓,过滤掉小面积区域(<500像素),绘制绿色边界框,添加"Red"文字标签。显示原始帧(带标记),显示颜色掩膜。
·
初始化摄像头
picam2 = Picamera2()
config = picam2.create_preview_configuration()
picam2.configure(config)
picam2.start()
设置颜色范围(红色)
lower_red = np.array([0, 100, 100]) # HSV格式下限
upper_red = np.array([10, 255, 255]) # HSV格式上限
lower_red2 = np.array([160, 100, 100]) # 红色在HSV色环的另一端
upper_red2 = np.array([180, 255, 255])
主循环
frame = picam2.capture_array()
frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
获取摄像头帧转换颜色空间从RGB到BGR(OpenCV标准,)再转换到HSV色彩空间(更适合颜色检测)
创建颜色掩膜
mask1 = cv2.inRange(hsv, lower_red, upper_red)
mask2 = cv2.inRange(hsv, lower_red2, upper_red2)
mask = mask1 + mask2
检测和标记物体
contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
area = cv2.contourArea(cnt)
if area > 500:
x, y, w, h = cv2.boundingRect(cnt)
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.putText(frame, "Red", (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
查找轮廓,过滤掉小面积区域(<500像素),绘制绿色边界框,添加"Red"文字标签
显示结果
cv2.imshow("Color Detection", frame)
cv2.imshow("Mask", mask)
显示原始帧(带标记),显示颜色掩膜
退出和清理
if cv2.waitKey(1) & 0xFF == ord('q'):
break
finally:
picam2.stop()
cv2.destroyAllWindows()
完整代码如下
from picamera2 import Picamera2
import cv2
import numpy as np
picam2 = Picamera2()
config = picam2.create_preview_configuration()
picam2.configure(config)
picam2.start()
lower_red = np.array([0, 100, 100])
upper_red = np.array([10, 255, 255])
lower_red2 = np.array([160, 100, 100])
upper_red2 = np.array([180, 255, 255])
try:
while True:
frame = picam2.capture_array()
frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
mask1 = cv2.inRange(hsv, lower_red, upper_red)
mask2 = cv2.inRange(hsv, lower_red2, upper_red2)
mask = mask1 + mask2
contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
area = cv2.contourArea(cnt)
if area > 500:
x, y, w, h = cv2.boundingRect(cnt)
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.putText(frame, "Red", (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
cv2.imshow("Color Detection", frame)
cv2.imshow("Mask", mask)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
finally:
picam2.stop()
cv2.destroyAllWindows()
如果需要修改颜色就修改上面的颜色设置范围,物体的坐标位于标记物体处,xywh等,可以发送给设备
运行结果如下
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)