使用 opencv 和 picamera (V2) 的高分辨率的白/蓝平衡错误

White/ Blue balance error in high resolution with opencv and picamera (V2)

我的问题是当我将分辨率设置为高于 640x480 时,输出颜色仅在右下方。输出的其余部分具有蓝色。

我有一个带有 4GB 内存的 RaspyberryPi4 和一个 PiCamera V2。 CPU 使用率在最高分辨率下不超过 ~65%。 同样的错误也出现在另一个 rapberrypi 及其 picamera (V2 NOIR) 上。

这是图片(不要在意角落里的白条:它们来自糟糕的屏幕截图)

640x480 - normal

1920x1080 - with error

3280x2464 - with error

这是我的 python 脚本:

import cv2
cap = cv2.VideoCapture(0)
width = 640; height = 480
# width = 1920; height = 1080
# width = 3280; height = 2464

cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
cv2.waitKey()

print(cap.get(cv2.CAP_PROP_FRAME_WIDTH),cap.get(cv2.CAP_PROP_FRAME_WIDTH))
while cap.isOpened():
    ret, frame = cap.read()
    cv2.imshow('Resolution: '+str(width)+'x'+str(height), frame)
    if cv2.waitKey(25) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

我知道在高分辨率下我会失去更高的帧率。

有人知道错误的来源是什么吗and/or我该如何解决这个错误?

此致

我会自己回答这个问题: 主要问题是 picamera 硬件以及 Raspberry 如何通过 Gpu 读取它。

快速解决方案是将分辨率更改为 32 的倍数。对于 FullHd 情况,它需要是 1920*1088 而不是 1920*1080。然后颜色又正常了。

我还找到了 fps 下降淹没之前的最高分辨率:
横向 1280*704
垂直 640*672
每个更高的分辨率都会将 fps 从 30+ 降低到 ~6-8。

相机传感器的哪一部分detecting/used也取决于分辨率。 有关详细信息,请仔细阅读文档 ;-)

Picamera official Documentation