Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么DSHOW可以控制白平衡,而OpenCV不能?_Python_Opencv_Webcam - Fatal编程技术网

Python 为什么DSHOW可以控制白平衡,而OpenCV不能?

Python 为什么DSHOW可以控制白平衡,而OpenCV不能?,python,opencv,webcam,Python,Opencv,Webcam,我正在开发一个Windows独立应用程序,需要拍摄照片,然后进行编辑 对于捕获和编辑,我使用OpenCV 为了在编辑过程中保持一致,我想禁用自动曝光和自动白平衡 我设法用OpenCV控制曝光,但没有白平衡。不过,当我使用DSHOW面板时,我可以更改白平衡 要打开DSHOW面板,我使用以下命令: cam.set(cv2.CAP\u PROP\u设置,1) 从OpenCV中,我可以读取白平衡值设置,但无法编辑它(set(…)在尝试执行时返回False)。我甚至看不清自动白平衡设置 Auto WB

我正在开发一个Windows独立应用程序,需要拍摄照片,然后进行编辑

对于捕获和编辑,我使用OpenCV

为了在编辑过程中保持一致,我想禁用自动曝光和自动白平衡

我设法用OpenCV控制曝光,但没有白平衡。不过,当我使用DSHOW面板时,我可以更改白平衡

要打开DSHOW面板,我使用以下命令:

cam.set(cv2.CAP\u PROP\u设置,1)
从OpenCV中,我可以读取白平衡值设置,但无法编辑它(
set(…)
在尝试执行时返回
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,因为大多数相机都不符合规格

我想知道什么是OpenCV不能使用的DSHOW面板

以下是完整的脚本:

导入cv2
#我选择DSHOW后端以便能够打开
#dshow设置窗口
cam=cv2.VideoCapture(0,cv2.CAP_DSHOW)
cv2.namedWindow(“测试”)
img_计数器=0
尽管如此:
ret,frame=cam.read()
如果不是ret:
打印(“抓取帧失败”)
打破
cv2.imshow(“测试”,帧)
k=cv2.等待键(1)
#退出
如果k==ord('q')或k==ord('q'):
打印(“结束…”)
打破
#打开DShow控制面板。
如果k==ord('p')或k==ord('p'):
打印(“打开控制器显示面板控制…”)
打印(凸轮设置(cv2.CAP\U PROP\U设置,1))
#切换白平衡
如果k==ord('t')或k==ord('t'):
打印(“更改白平衡值。尝试不同的事情…”)
打印(凸轮组(cv2.CAP\U PROP\U AUTO\U WB,1))
打印(凸轮组(cv2.CAP\U PROP\U AUTO\U WB,0))
打印(凸轮组(cv2.CAP\U PROP\U AUTO\U WB,真))
打印(凸轮组(cv2.CAP\U PROP\U AUTO\U WB,False))
打印(凸轮组(cv2.CAP\U PROP\U XI\U MANUAL\U WB,1))
打印(凸轮组(cv2.CAP\U PROP\U XI\U MANUAL\U WB,0))
打印(凸轮组(cv2.CAP\U PROP\U XI\U AUTO\U WB,1))
打印(凸轮组(cv2.CAP\U PROP\U XI\U AUTO\U WB,0))
#显示白平衡
如果k==ord('w')或k==ord('w'):
打印(“白平衡设置:”)
打印(“自动WB”,cam.get(cv2.CAP\U PROP\U Auto\U WB))
打印(“XI Auto WB”,cam.get(cv2.CAP\U PROP\U XI\U Auto\U WB))
打印(“XI手动WB”,cam.get(cv2.CAP\U PROP\U XI\U手动WB))
打印(“WB温度”,cam.get(cv2.CAP\U PROP\U WB\U温度))
打印(“WB蓝U”,cam.get(cv2.CAP\U道具\U白平衡\U蓝)
打印(“WB红色V”,cam.get(cv2.CAP\U道具\U白色\U平衡\U红色\U V))
cam.release()
cv2.destroyAllWindows()

我成功地控制了相机的自动白平衡和曝光。不幸的是,目前无法通过OpenCV实现这一点。

我成功地使用控制相机自动白平衡和曝光。遗憾的是,目前无法通过OpenCV实现这一点。

OpenCV无法支持所有类型的不同设备驱动程序。如果您使用的是direct show设备,您可以尝试一下videoInput library,afair专门针对dshow设备,如果您在那里找到解决方案,您可以将其破解到opencv源代码,该源代码使用的是videoInput library的一个子集,我无法对opencv发表评论,因为我还没有研究它是如何做到的,但是,如果您想使用directshow来实现这一点,可以使用API来实现。请参阅IAMDevideoProCamp接口和一个示例。opencv无法支持所有类型的不同设备驱动程序。如果您使用的是direct show设备,您可以尝试一下videoInput library,afair专门针对dshow设备,如果您在那里找到解决方案,您可以将其破解到opencv源代码,该源代码使用的是videoInput library的一个子集,我无法对opencv发表评论,因为我还没有研究它是如何做到的,但是,如果您想使用directshow来实现这一点,可以使用API来实现。请参见IAMDevideoProCamp接口和示例。