我正在尝试使用 OpenCV 从 Raspberry Pi 相机模块捕获图像。代码运行没有错误,但我得到的框架是全黑的。
当我使用
rpicam-still -o Desktop/image.jpg
时,我可以从相机获取静态图片。然而,当我运行在互联网上找到的这段代码时,我只得到一个全黑的框架。我不确定我从哪里得到它,但它是一个只是尝试使用 OpenCV 的通用代码。
代码:
import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
if not cap.isOpened():
print("Cannot open camera")
exit()
while True:
ret, frame = cap.read()
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break
print(frame.max(), frame.mean())
cv.imshow('frame', frame)
cv.imwrite('frame.png', frame)
if cv.waitKey(1) == ord('q'):
break
cap.release()
cv.destroyAllWindows()
更新:
现在,这就是我的代码在您建议的修改后的样子。然而,结果保持不变,因为我仍然得到一个黑框。此时,我已经修改了几乎所有建议的内容,但我没有在这段代码中设置曝光时间,因为我之前尝试过,但它似乎没有改进任何东西。如果有人认为我应该尝试再次设置曝光时间,请告诉我,以及是否需要更多信息。
此外,我在 Thonny IDE 中运行此程序,并且使用带有 RaspiCam 模块的 Raspberry Pi 3(带有 Raspberry Pi OS 64 位)。我已经检查了 OpenCV 安装,一切似乎都很好,但我将包括我正在使用的 Python 和 OpenCV 版本:
$ pip show opencv-python
Name: opencv-python
Version: 4.10.0.84
Summary: Wrapper package for OpenCV python bindings.
Home-page: https://github.com/opencv/opencv-python
Author:
Author-email:
License: Apache 2.0
$ python3 --version
Python 3.11.2
(这是我第一次在这里发帖,英语不是我的母语,所以如果您对我的写作或我提供的数据有任何疑问,请告诉我。)
抱歉,我不得不删除我的答案,因为它不是 Picamera 2。
OP 是这么说的, 我使用的是 Raspberry Pi 相机模块,它直接连接到 HDMI 和音频 (P2) 端口之间的端口。这是一个使用扁平电缆的 CSI 连接器
要将 Picamera 2 用于 Bookworm:
片段:
from picamera2 import Picamera2, Preview
import time
picam2 = Picamera2()
camera_config = picam2.create_preview_configuration()
picam2.configure(camera_config)
picam2.start_preview(Preview.QTGL)
picam2.start()
time.sleep(2)
picam2.capture_file("test.jpg")
您可以通过以下链接学习教程:PiCamera 2