在Raspberry Pi上编辑视频帧

时间:2015-09-27 17:54:14

标签: python opencv raspberry-pi

我有以下代码:

# Import packages
from picamera.array import PiRGBArray
from picamera import PiCamera
import time
import cv2

X_RESOLUTION = 640
Y_RESOLUTION = 480

# Initialize the camera and grab a reference to the raw camera capture
camera = PiCamera()
camera.resolution = (X_RESOLUTION, Y_RESOLUTION)
camera.framerate = 10
rawCapture = PiRGBArray(camera, size = (X_RESOLUTION, Y_RESOLUTION))

# Allow camera to warmup
time.sleep(0.1)

#Capture frames from the camera
for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
    # Grab the raw NumPy array representing the image
    image = frame.array

    # Show the frame
    cv2.imshow("Frame", image)
    key = cv2.waitKey(1) & 0xFF

    # Clear the stream so it is ready to receive the next frame
    rawCapture.truncate(0)

    # If the 'q' key was pressed, break from the loop
    if(key == ord('q')):
        break

一切都很好,花花公子。它会捕获视频并将其显示在我的屏幕上,当我按下“q”时它会退出。但是,如果我想以某种方式操纵帧,例如我想将每帧中的每个像素R值设置为255以使图像变为红色。我该怎么做?

我的最终目标是编写检测静态背景移动的软件。我理解为实现这一目标需要完成的理论和实际数据操作,我只是想弄清楚如何访问每个帧的像素数据并对其进行操作。我试图更改' image'中的某些值,但它表示数组是不可变的,无法写入,只能从中读取。

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

我已经随机访问了每个像素{R,G,B值单独访问}值并更改了图像中的值。您可以通过提取视频的每一帧来对视频执行此操作。它是用c ++实现的opencv。通过此链接https://stackoverflow.com/a/32664968/3853072,您将获得一个想法。