IP摄像机OpenCV图像过度读取

dxxyhpgq  于 2023-03-03  发布在  其他
关注(0)|答案(1)|浏览(148)

我在我的RPI 4上(甚至在我的Mac上)用OpenCV和Python处理IP Camera图像有困难。我的项目是获取IP Camera图像(RGB-1920 x 1080)并用对象检测算法处理它们。我没有任何实时限制。如果我能每5分钟运行一次算法,那就完美了。
OpenCV版本:4.1.1 Python版本:3.6.5
首先,我用之前(用同一台相机)录制的图像库测试了这个算法,效果非常好。
尽管如此,一旦我尝试使用视频流我得到了一个关于过读的错误。我想,我应该有一个关于我管理图像流的方式的问题。

import cv2, time

cap = cv2.VideoCapture(‘URL’)
if (cap.isOpened()== False):
        print("Error opening video stream or file")

sampleTime = 10 # in seconds
imgCounter = 0
startTime = time.time()

while True:
        ret, frameCaptured = cap.read()

        if time.time() - startTime >= sampleTime and ret == True:
                startTime = time.time()

                # Do some stuff here
                time.sleep(5)
                cv2.imshow('Captured Image', frameCaptured)
                imgCounter += 1
                print("Image:",imgCounter)

        if cv2.waitKey(1) & 0xFF == ord('q'):
                break

cap.release()
cv2.destroyAllWindows()

即使正常记录了第一张图像,我也会系统性地得到一个错误:图片:1 [mjpeg@0x7ff6ac808000]被过度读取8
然后变量"ret"变为False。注意,如果没有条件"ret == True",我看到第二张图像上出现一个绿色区域,然后执行停止。

yr9zkbsy

yr9zkbsy1#

我有一个类似的问题,从一个IP相机阅读,发现我最初是设置我的图像大小为VGA,然后缩小到后来的QVGA。
(Code下面是来自IP摄像头而不是PC端)

if(psramFound()){
    config.frame_size = FRAMESIZE_QVGA;
    config.jpeg_quality = 8;
    config.fb_count = 2;
    Serial.print("PSRAM FOUND");

// camera init etc

sensor_t * s = esp_camera_sensor_get();
// drop down frame size for higher initial frame rate
s->set_framesize(s, FRAMESIZE_VGA);

因此,opencv试图将QVGA图像放入VGA框中,导致过读。这是我最好的猜测,可能不完全准确,但修复了我的错误。

相关问题