欢迎访问宙启技术站
智能推送

利用PiRGBArray()实现树莓派图像数据流的图像裁剪和缩放

发布时间:2023-12-31 21:40:00

树莓派摄像头模块常用的图像数据流处理方式是使用PiRGBArray(),该方法可以实现图像的裁剪和缩放。下面提供一个例子,展示如何利用PiRGBArray()实现图像的裁剪和缩放。

首先,我们需要导入需要的库和模块:

from picamera.array import PiRGBArray
from picamera import PiCamera
import time
import cv2

然后,初始化相机和PiRGBArray对象:

camera = PiCamera()
rawCapture = PiRGBArray(camera)

接下来,设置相机的分辨率和帧率:

camera.resolution = (640, 480)
camera.framerate = 32

可以按需调整分辨率和帧率。

然后,给摄像头一些时间以适应光照条件:

time.sleep(0.1)

现在,我们可以使用一个循环来读取摄像头捕获的图像:

for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
    image = frame.array

上述代码会将捕获的图像保存在一个名为image的变量中。

接下来,我们可以对图像进行裁剪和缩放。假设我们想裁剪图像的左上角,并将图像缩放为原来的一半大小:

cropped_image = image[0:240, 0:320]
resized_image = cv2.resize(cropped_image, (320, 240))

上述代码会将图像的左上角裁剪为240x320的尺寸,并将图像缩放为原来的一半大小。

最后,可以使用OpenCV库的imshow()函数显示图像:

cv2.imshow("Image", resized_image)
cv2.waitKey(1)

最后,我们需要清空PiRGBArray对象以准备下一次的捕获:

rawCapture.truncate(0)

完整的代码如下:

from picamera.array import PiRGBArray
from picamera import PiCamera
import time
import cv2

camera = PiCamera()
rawCapture = PiRGBArray(camera)

camera.resolution = (640, 480)
camera.framerate = 32

time.sleep(0.1)

for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
    image = frame.array
    
    cropped_image = image[0:240, 0:320]
    resized_image = cv2.resize(cropped_image, (320, 240))
    
    cv2.imshow("Image", resized_image)
    cv2.waitKey(1)
    
    rawCapture.truncate(0)

上述代码会实时显示裁剪和缩放后的图像。

这样,我们就利用PiRGBArray()实现了树莓派图像数据流的图像裁剪和缩放。可以根据实际需求,调整裁剪和缩放的参数,实现不同的效果。