我正在尝试使用 OpenCV 制作一个 python 程序,该程序打开网络摄像头并实时拍摄几张具有不同曝光度的图像(40ms、95ms、150ms)并最终对它们进行平均。我尝试创建一个循环,在该循环中更改曝光时间,更新渲染(帧)并将其保存在列表中,但问题是显示保持静态并且渲染几乎没有变化(合并图像后给出图像其曝光时间几乎是 40)
我以为设置曝光时间后,帧更新需要一些时间,所以我添加了time.sleep
暂停执行3秒的方法,但它是徒劳的。
这是我的代码
import numpy as np
import cv2
import os
import time
capture = cv2.VideoCapture(0, cv2.CAP_V4L2)
while True:
(grabbed, frame) = capture.read()
if not grabbed:
break
# Resize frame
width = 1500
height = 1000
dim = (width, height)
frame = cv2.resize(frame, dim, interpolation=cv2.INTER_AREA)
cv2.imshow('RGB', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
if cv2.waitKey(1) == ord('h') or cv2.waitKey(1) == ord('H'):
#repertory = input("Enter the name of the directory: ")
if not os.path.exists(repertory):
os.mkdir(repertory)
exposure = [40,95,150]
ims = []
for i in exposure:
capture.set(cv2.CAP_PROP_EXPOSURE, i) # Setting Exposure
(grabbed, frame) = capture.read() # Updating frame
if grabbed:
cv2.imshow('RGB', frame) #Display
ims.append(frame)
# Convert to numpy
ims = np.array([np.array(im) for im in ims])
# average et conversion en uint8
imave = np.average(ims, axis=0)
imave = imave.astype(np.uint8)
# image HDR
cv2.imwrite(repertory + '/' + repertory + '_HDR8.jpg', imave)
capture.release()
cv2.destroyAllWindows()
是否有最佳解决方案可以实时自动拍摄具有不同曝光时间的照片?