picamera.array库中的PiRGBArray()函数在Python中的应用
发布时间:2024-01-13 07:50:57
PiRGBArray()函数是picamera.array库中的一个函数,用于创建一个可以接收来自摄像头的RGB图像的numpy数组。这个函数的使用可以帮助我们在树莓派上进行实时图像处理和计算机视觉任务。
示例代码如下:
import picamera
import picamera.array
import cv2
# 初始化摄像头
camera = picamera.PiCamera()
camera.resolution = (640, 480)
camera.framerate = 30
# 创建一个可以接收RGB图像的numpy数组
raw_capture = picamera.array.PiRGBArray(camera, size=(640, 480))
# 等待摄像头初始化
time.sleep(0.1)
# 持续接收摄像头图像
for frame in camera.capture_continuous(raw_capture, format="bgr", use_video_port=True):
# 获取图像数据
image = frame.array
# 在图像上进行一些处理,比如检测边缘
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 100, 200)
# 显示处理后的图像
cv2.imshow("Processed Image", edges)
cv2.waitKey(1)
# 清空numpy数组,准备下一帧图像接收
raw_capture.truncate(0)
# 按下q退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 关闭摄像头,销毁窗口
camera.close()
cv2.destroyAllWindows()
在这个例子中,我们首先导入了picamera, picamera.array和cv2库。然后,我们初始化摄像头,设置分辨率和帧率,并创建一个可以接收RGB图像的numpy数组。
接下来,我们进行一个无限循环,通过调用camera.capture_continuous()函数不断接收摄像头的图像,存储在raw_capture数组中。我们可以在图像上进行一些处理,比如将图像转为灰度图并检测边缘。然后,我们显示处理后的图像,并使用cv2.waitKey()函数来等待用户是否按下q键退出循环。
最后,我们在循环的结尾使用raw_capture.truncate(0)来清空numpy数组,准备下一帧图像的接收。当用户按下q键后,我们关闭摄像头并销毁显示窗口。
通过使用PiRGBArray()函数,我们可以方便地在Python中进行实时图像处理和计算机视觉任务,如目标检测、人脸识别等。
