我一直在玩opencv2的python包装器。 我想玩一些想法,并使用广角相机类似于“后视”在汽车相机。 我从一辆报废的撞车(它有4根电线)中得到了一根电线,我根据电线颜色编码进行了有根据的猜测,将其连接起来,以便从a型usb为电源线和地线供电,并从RCA连接器为NTSC复合+复合供电。 我买了一个NTSC到usb转换器。
它配有驱动程序和一些现成的VHStoDVD软件。
我使用了在线运行的例子来进行这样的测试:
import numpy as np
import cv2
cam_index=0
cap=cv2.VideoCapture(cam_index)
print cap.isOpened()
ret, frame=cap.read()
#print frame.shape[0]
#print frame.shape[1]
while (cap.isOpened()):
ret, frame=cap.read()
#gray=cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
#release and close
cap.release()
cv2.destroyAllWindows()
这是shell的输出:
True
Traceback (most recent call last):
File "C:/../cam_capture_.py", line 19, in <module>
cv2.imshow('frame', frame)
error: ..\..\..\..\opencv\modules\highgui\src\window.cpp:261: error: (-215) size.width>0 && size.height>0 in function cv::imshow
>>>
在控制面板中,usb加密狗在声音视频和游戏控制器中显示为“OEM捕获”。因此,在“图像设备”中,它不是一个简单的即插即用网络摄像头
如果我打开VHStoDVD软件,我需要配置两个方面:
当我在FLV(设备捕获)中打开设备视频通道时。设备流只是一个黑屏,但如果我打开VHStoDVD软件,而flv是流,我得到相机的饲料流在flv和一个黑屏显示在VHStoDVD饲料。另一个重要的区别是,当feed在FLV中而不是在VHStoDVD中运行时,有大约0.5秒的巨大延迟。
当按照上面的示例代码在运行时运行“cam_capture.py”时,我最终会得到一个停止错误代码0x0000008e:
详细信息:
stop: 0x0000008E (0xC0000005, 0xB8B5F417, 0X9DC979F4, 0X00000000 )
ks.sys - Address B8B5F417 base at B8B5900, Datestamp...
beg mem dump
phy mem dump complete
5.如果我试图打印frame.shape[0]或frame.shape[1],我会收到一个类型错误,说我无法打印type None
6.如果尝试其他cam_索引,则结果总是错误的
在“控制面板”中,相机设备位于“声音视频和游戏控制器”下,而不是“图像设备”下
凸轮分度=零
capture.isOpened()=真
帧大小为无
如果VHStoDVD运行的是配置了复合NTSC的相机,显然你看不到附带printscreen的图像,但相信我!;)
是否有任何形式的初始化开始与加密狗通信,可以解决这一问题,即模拟VHStoDVD设置(复合+NTSC)?我以为我可以在VHStoDVD和加密狗之间的通信开始时进行总线盗版,但我觉得我正在做一些我认为是关键转折解决方案的事情。
任何建设性的见解,建议,更正都是最受欢迎的!
谢谢
干杯
好的,经过更深入的调查,最初的怀疑被证实了,也就是说,因为NTSC加密狗不是作为成像设备处理的(它被视为视频控制器,所以类似于电视调谐器卡的模拟),这意味着尽管我们可以用cam_index=0调用cv2.VideoCapture,但视频通道本身并没有传输,因为我们需要定义一组参数
问题是,该设备不支持作为调用cv2.VideoCapture.set(参数、值)的成像设备,似乎不会更改原始视频源上的任何内容。
我没有找到解决办法,但我找到了解决办法。网上似乎有很多选择。搜索关键字DV到网络摄像机或摄像机作为网络摄像机。
我用的是DVdriver(http://www.trackerpod.com/TCamWeb/download.htm)(我用的是试用版,因为我很便宜!)。
为什么有效?
据我所知,DVdriver从设置为视频控制器(类似于从“Windows Movie Maker”或ffmpeg捕获)的设备接收数据,然后通过“fairydust”将cam_index=0上的帧(假定没有连接其他cam)输出为“成像设备”网络摄像机。
摘要
TLDR使用DVdriver或类似产品。
我找到了一个解决方法,但我真的很想从第一个原则来理解它,并可能从python中生成类似的NTSC加密狗初始化,不需要任何其他软件依赖项,但在那之前,希望这将帮助其他人也在挣扎或假设这是硬件问题。
我现在给你留点贝克特: 曾经尝试过。曾经失败过。没关系。再试一次。又失败了。失败得更好。(!)
我也面临同样的问题。作为一种解决方法,我首先尝试了@user3380927提出的解决方案,它确实有效。但由于我不想依赖外部软件,所以我开始在Python中使用opencv调整参数。
这几行代码就像一个符咒(您必须在第一次阅读框架之前插入它们):
因此,摄像机基本读数的完整代码如下:
然后可以像往常一样应用图像处理操作。仅供参考,这是我的配置:
虽然晚了几个月,但可能会有用。我在一台Windows计算机上工作,安装了设备附带的驱动程序,我用Somagic的Ezcap尝试了与您的问题相同的代码,得到了相同的错误。由于“frame is None”,我决定尝试使用if语句来处理它,以防它是一个初始化错误。放入循环:
结果是:011111111111111111111111。。。
如果在循环上方的frame=cap.read()被注释掉-我得到:00111111111111。。。
所以对于我的设备捕获设备来说,它似乎在工作,所有超过5帧的帧都被捕获。我不知道这是为什么,但这可能是一个有用的工作目前。
免责声明:不幸的是,我的相机输入当前处于辐射场中,因此我在几周内无法确定它是否正常工作。然而,图像目前是一个黑色的框架(这是预期没有适当的输入)。
相关问题 更多 >
编程相关推荐