在当前的机器视觉和机器人技术领域,实时图像处理是一项至关重要的技术。本文介绍了如何利用Python、OpenCV库以及Intel的Realsense摄像头来进行实时的颜色识别。这种技术可以广泛应用于自动化检测、机器人导航以及交互式媒体等领域。
一、 开发环境配置
首先,我们需要配置Python开发环境,确保安装了`pyrealsense2`和`numpy`、`opencv-python`(通常简称cv2)这些库。这些库允许我们操作Realsense摄像头并进行图像处理。
```bash
pip install pyrealsense2 numpy opencv-python
```
整体代码:
#!/usr/bin/env python3.8
# _*_ coding: utf-8 _*_
# 导入依赖
import pyrealsense2 as rs
import numpy as np
import cv2
# 设置颜色字典
ball_color = 'red'
color_dist = {
'red': {'Lower': np.array([0, 60, 60]), 'Upper': np.array([6, 255, 255])},
'blue': {'Lower': np.array([100, 80, 46]), 'Upper': np.array([124, 255, 255])},
'green': {'Lower': np.array([35, 43, 35]), 'Upper': np.array([90, 255, 255])},
}
# 初始化realsense相机
pipeline = rs.pipeline()
config = rs.config()
config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)
pipeline.start(config)
# 创建opencv窗口
cv2.namedWindow('RealSense', cv2.WINDOW_AUTOSIZE)
try:
while True:
# 等待一帧数据
frames = pipeline.wait_for_frames()
color_frame = frames.get_color_frame()
if not color_frame:
continue
# 将图像转为numpy数组以便OpenCV处理
color_image = np.asanyarray(color_frame.get_data())
# 颜色识别流程
gs_frame = cv2.GaussianBlur(color_image, (5, 5), 0) # 高斯模糊
hsv = cv2.cvtColor(gs_frame, cv2.COLOR_BGR2HSV) # 转换到HSV
erode_hsv = cv2.erode(hsv, None, iterations=2) # 腐蚀处理
inRange_hsv = cv2.inRange(erode_hsv, color_dist[ball_color]['Lower'], color_dist[ball_color]['Upper'])
cnts = cv2.findContours(inRange_hsv.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]
if len(cnts) > 0:
c = max(cnts, key=cv2.contourArea)
rect = cv2.minAreaRect(c)
box = cv2.boxPoints(rect)
cv2.drawContours(color_image, [np.int0(box)], -1, (0, 255, 255), 2)
cv2.imshow('RealSense', color_image)