为什么DSHOW可以控制白平衡而OpenCV不能?
Why DSHOW can control white balance but OpenCV cannot?
我正在开发一个 Windows 独立应用程序,它需要拍照然后进行编辑。
对于捕获和编辑,我使用的是 OpenCV。
为了在我的编辑过程中保持一致的行为,我想禁用自动曝光和自动白平衡。
我设法用 OpenCV 控制曝光,但不是白平衡。虽然,当我使用 DSHOW 面板时,我可以更改白平衡。
要打开 DSHOW 面板,我使用以下命令:
cam.set(cv2.CAP_PROP_SETTINGS, 1)
从 OpenCV 中,我可以读取白平衡值设置,但无法对其进行编辑(set(...)
returns False
当我尝试这样做时)。而且我什至看不懂自动白平衡设置。
Auto WB -1.0
XI Auto WB -1.0
XI Manual WB -1.0
WB Temp -1.0
WB Blue U 5415.0
WB Red V -1.0
根据我在网上阅读的内容,我们不能过分依赖此 API,因为大多数相机不符合规格。
我想知道 DSHOW 面板有什么 OpenCV 不能做的?
这是完整的脚本:
import cv2
# I choose DSHOW backend to be able to open
# the dshow settings window
cam = cv2.VideoCapture(0, cv2.CAP_DSHOW)
cv2.namedWindow("test")
img_counter = 0
while True:
ret, frame = cam.read()
if not ret:
print("failed to grab frame")
break
cv2.imshow("test", frame)
k = cv2.waitKey(1)
# Quit
if k == ord('q') or k == ord('Q'):
print("Closing...")
break
# Open DShow control panel.
elif k == ord('p') or k == ord('P'):
print("Opening director show panel control...")
print(cam.set(cv2.CAP_PROP_SETTINGS, 1))
# Toggle white balance
elif k == ord('t') or k == ord('T'):
print("Change white balance value. Trying different things...")
print(cam.set(cv2.CAP_PROP_AUTO_WB, 1))
print(cam.set(cv2.CAP_PROP_AUTO_WB, 0))
print(cam.set(cv2.CAP_PROP_AUTO_WB, True))
print(cam.set(cv2.CAP_PROP_AUTO_WB, False))
print(cam.set(cv2.CAP_PROP_XI_MANUAL_WB, 1))
print(cam.set(cv2.CAP_PROP_XI_MANUAL_WB, 0))
print(cam.set(cv2.CAP_PROP_XI_AUTO_WB, 1))
print(cam.set(cv2.CAP_PROP_XI_AUTO_WB, 0))
# Show white balance
elif k == ord('w') or k == ord('W'):
print("White balance settings :")
print("Auto WB ", cam.get(cv2.CAP_PROP_AUTO_WB))
print("XI Auto WB ", cam.get(cv2.CAP_PROP_XI_AUTO_WB))
print("XI Manual WB ", cam.get(cv2.CAP_PROP_XI_MANUAL_WB))
print("WB Temp ", cam.get(cv2.CAP_PROP_WB_TEMPERATURE))
print("WB Blue U ", cam.get(cv2.CAP_PROP_WHITE_BALANCE_BLUE_U))
print("WB Red V ", cam.get(cv2.CAP_PROP_WHITE_BALANCE_RED_V))
cam.release()
cv2.destroyAllWindows()
我设法使用 Direct Show 控制相机的自动白平衡和曝光。不幸的是,目前无法通过 OpenCV 完成此操作。
我正在开发一个 Windows 独立应用程序,它需要拍照然后进行编辑。
对于捕获和编辑,我使用的是 OpenCV。
为了在我的编辑过程中保持一致的行为,我想禁用自动曝光和自动白平衡。
我设法用 OpenCV 控制曝光,但不是白平衡。虽然,当我使用 DSHOW 面板时,我可以更改白平衡。
要打开 DSHOW 面板,我使用以下命令:
cam.set(cv2.CAP_PROP_SETTINGS, 1)
从 OpenCV 中,我可以读取白平衡值设置,但无法对其进行编辑(set(...)
returns False
当我尝试这样做时)。而且我什至看不懂自动白平衡设置。
Auto WB -1.0
XI Auto WB -1.0
XI Manual WB -1.0
WB Temp -1.0
WB Blue U 5415.0
WB Red V -1.0
根据我在网上阅读的内容,我们不能过分依赖此 API,因为大多数相机不符合规格。
我想知道 DSHOW 面板有什么 OpenCV 不能做的?
这是完整的脚本:
import cv2
# I choose DSHOW backend to be able to open
# the dshow settings window
cam = cv2.VideoCapture(0, cv2.CAP_DSHOW)
cv2.namedWindow("test")
img_counter = 0
while True:
ret, frame = cam.read()
if not ret:
print("failed to grab frame")
break
cv2.imshow("test", frame)
k = cv2.waitKey(1)
# Quit
if k == ord('q') or k == ord('Q'):
print("Closing...")
break
# Open DShow control panel.
elif k == ord('p') or k == ord('P'):
print("Opening director show panel control...")
print(cam.set(cv2.CAP_PROP_SETTINGS, 1))
# Toggle white balance
elif k == ord('t') or k == ord('T'):
print("Change white balance value. Trying different things...")
print(cam.set(cv2.CAP_PROP_AUTO_WB, 1))
print(cam.set(cv2.CAP_PROP_AUTO_WB, 0))
print(cam.set(cv2.CAP_PROP_AUTO_WB, True))
print(cam.set(cv2.CAP_PROP_AUTO_WB, False))
print(cam.set(cv2.CAP_PROP_XI_MANUAL_WB, 1))
print(cam.set(cv2.CAP_PROP_XI_MANUAL_WB, 0))
print(cam.set(cv2.CAP_PROP_XI_AUTO_WB, 1))
print(cam.set(cv2.CAP_PROP_XI_AUTO_WB, 0))
# Show white balance
elif k == ord('w') or k == ord('W'):
print("White balance settings :")
print("Auto WB ", cam.get(cv2.CAP_PROP_AUTO_WB))
print("XI Auto WB ", cam.get(cv2.CAP_PROP_XI_AUTO_WB))
print("XI Manual WB ", cam.get(cv2.CAP_PROP_XI_MANUAL_WB))
print("WB Temp ", cam.get(cv2.CAP_PROP_WB_TEMPERATURE))
print("WB Blue U ", cam.get(cv2.CAP_PROP_WHITE_BALANCE_BLUE_U))
print("WB Red V ", cam.get(cv2.CAP_PROP_WHITE_BALANCE_RED_V))
cam.release()
cv2.destroyAllWindows()
我设法使用 Direct Show 控制相机的自动白平衡和曝光。不幸的是,目前无法通过 OpenCV 完成此操作。