相机工作正常,当我使用软件来验证相机我看到没有损坏的帧,所以我假设这是问题来自OpenCV。
我注意到随机帧(10-20帧中的一帧)被损坏,其中一个通道被移位。
x1c 0d1x的数据
我将相机代码作为在后台运行的服务运行,因此任何其他应用程序都可以获得最新的帧并使用它,而无需运行读取帧循环并使用异步代码。
import threading
import time
import cv2 as cv
import numpy as np
class CameraCU81():
def __init__(self, W=1920, H=1080, hz=30):
self.cap = cv.VideoCapture(0)
self.last_frame = None
# if recording mjgp the frames hangs...
#self.cap.set(cv.CAP_PROP_FOURCC, cv.VideoWriter_fourcc('M', 'J', 'P', 'G'))
print(str(cv.VideoWriter_fourcc('M', 'J', 'P', 'G')))
self.cap.set(cv.CAP_PROP_FRAME_WIDTH, W)
self.cap.set(cv.CAP_PROP_FRAME_HEIGHT, H)
self.cap.set(cv.CAP_PROP_FPS, hz)
print('Starting camera 81 fps at: ' + str(self.cap.get(cv.CAP_PROP_FPS)))
w = str(self.cap.get(cv.CAP_PROP_FRAME_WIDTH))
h = str(self.cap.get(cv.CAP_PROP_FRAME_HEIGHT))
print('Starting camera 81 resolution at: ' + w + ' x ' + h)
format = str(self.cap.get(cv.CAP_PROP_FOURCC))
print('Starting camera 81 format: ' + format)
def __capture_frames(self):
error_f = False
while True:
start_time = time.time()
ret, frame = self.cap.read()
if not ret:
timeout_time = (time.time() - start_time)
print('Frame could not be read ... is camera connected?')
print(timeout_time)
error_f = True
else:
self.last_frame = frame
if error_f:
timeout_time = (time.time() - start_time)
print(timeout_time)
def get_data(self):
return self.last_frame
def destroy(self):
self.cap.release()
def run(self):
t1 = threading.Thread(target=self.__capture_frames)
t1.daemon = True
t1.start()
字符串
1条答案
按热度按时间lyfkaqu11#
几个星期后,我发现我的树莓派4的USB吞吐量下降了。将2个摄像头连接到USB3.0是一个问题。
降低了我的一台相机的分辨率,然后将一台相机连接到USB2.0总线,另一台连接到USB3.0总线。