opencv VideoCapture帧图像损坏:在随机帧上移动其中一个通道

kgsdhlau  于 2023-11-22  发布在  其他
关注(0)|答案(1)|浏览(207)

相机工作正常,当我使用软件来验证相机我看到没有损坏的帧,所以我假设这是问题来自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()

字符串

lyfkaqu1

lyfkaqu11#

几个星期后,我发现我的树莓派4的USB吞吐量下降了。将2个摄像头连接到USB3.0是一个问题。
降低了我的一台相机的分辨率,然后将一台相机连接到USB2.0总线,另一台连接到USB3.0总线。

相关问题