抓取帧NTSCTOUB加密狗,opencv2,python包装器 背景:
我一直在使用python的opencv2包装器。 我想玩一些想法,使用一个广角摄像头,类似于汽车中的“后视”摄像头。 我从一辆报废的撞车上得到了一个(它有4根电线),我根据电线颜色编码进行了一个有根据的猜测,将其连接起来,以便从usb类型a为电源线和地线供电,并从RCA接头为NTSC复合材料+复合材料供电。 我买了一个NTSC到usb转换器 它附带了驱动程序和一些现成的VHStoDVD软件 问题是: 我使用普通的在线示例对其进行了如下测试:抓取帧NTSCTOUB加密狗,opencv2,python包装器 背景:,python,opencv,python-2.7,video-capture,analog-digital-converter,Python,Opencv,Python 2.7,Video Capture,Analog Digital Converter,我一直在使用python的opencv2包装器。 我想玩一些想法,使用一个广角摄像头,类似于汽车中的“后视”摄像头。 我从一辆报废的撞车上得到了一个(它有4根电线),我根据电线颜色编码进行了一个有根据的猜测,将其连接起来,以便从usb类型a为电源线和地线供电,并从RCA接头为NTSC复合材料+复合材料供电。 我买了一个NTSC到usb转换器 它附带了驱动程序和一些现成的VHStoDVD软件 问题是: 我使用普通的在线示例对其进行了如下测试: import numpy as np import c
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
>>>
5.如果我尝试打印frame.shape[0]或frame.shape[1],我会收到一个类型错误,表示我无法打印类型None
6.如果尝试其他cam_索引,结果总是错误的
TLDR:
在“控制面板”中,摄像机设备位于“声音视频和游戏控制器”下,而不是位于“成像设备”下
cam_指数==零
capture.isopend()=True
帧大小为零
如果VHStoDVD是在配置了复合NTSC的情况下运行的,则相机可以正常工作,显然,您无法在附件中看到带有printscreen的图像,但请相信我!;)
是否有任何形式的启动与加密狗通信的初始化可以解决这一问题,即模拟VHStoDVD设置(复合+NTSC)?我原以为我可以在VHStoDVD和加密狗之间开始通信,但我觉得我正在做一些我认为是关键转折点解决方案的事情
欢迎提出任何建设性的见解、建议和更正
谢谢
干杯好的,因此在深入调查后,最初的怀疑得到了确认,即因为NTSC加密狗不是作为成像设备处理的(它被视为视频控制器,非常类似于模拟电视调谐器卡)这意味着,尽管我们可以使用cam_index=0调用cv2.VideoCapture,但视频通道本身并没有传输,因为我们需要定义一组参数
我试过了。曾经失败过。不管怎样再试一次。再次失败。失败得更好。(!)虽然晚了几个月,但可能有用。我在一台Windows计算机上工作,安装了设备附带的驱动程序,我用Somagic的Ezcap尝试了与您问题相同的代码,但得到了相同的错误。由于“frame is None”,我决定在它周围尝试一个if语句,以防它是一个初始化错误。放入循环中: 结果是:011011111111111111111 如果frame=cap.read(),上面的循环被注释掉-我得到:00111111111 因此,对于我的设备捕获设备,它似乎对捕获的第5帧以外的所有帧都有效。我不确定这是为什么,但现在这可能是一个有用的解决办法
免责声明:不幸的是,我的相机输入目前处于辐射场中,因此我在几周内无法确定它是否正常工作。然而,这些图像目前是一个黑框(如果没有适当的输入,这是应该的)。我面临同样的问题。作为一种变通方法,我首先尝试了@user3380927提出的解决方案,它确实奏效了。但由于我不想依赖外部软件,我开始在Python中使用opencv调整参数 这几行代码就像一个符咒(你必须在第一次阅读框架之前插入它们): 因此,基本摄像机读数的完整代码如下:
import cv2
cam = cv2.VideoCapture(1)
cam.set(cv2.CAP_FFMPEG,True)
cam.set(cv2.CAP_PROP_FPS,30)
while(True):
ret,frame = cam.read()
cv2.imshow('frame',frame)
if (cv2.waitKey(1) & 0xFF == ord('q')):
break
cam.release()
cv2.destroyAllWindows()
然后可以像往常一样应用图像处理操作。仅供参考,这是我的配置:
- Opencv 3.1.0
- Python 2.7.5
- Windows 8.1
- Elgato视频捕获设备(也显示为声音视频和游戏控制器)
停止:…
错误和标准回溯错误?看起来您会立即得到回溯,但它不会“运行”…?这可能需要很多故障排除。如果你不介意,请使用。显然,我没有足够的代表使用聊天,但这里说:祝贺你找到了解决方法。您还确认了它实际上正在使用原始设置拾取相机,这是一大步。您提到cv2.VideoCapture.set(…)
不起作用,但让我确定一下。。。当你使用它时,我很确定你必须在你创建的视频捕获实例上调用它。即cap=cv2.VideoCapture(..)
后接cap.set(cv2.cv.cv\u cap\u PROP\u FRAME\u WIDTH,1024)
。
if frame is None:
print 0
else:
print 1
cam.set(cv2.CAP_FFMPEG,True)
cam.set(cv2.CAP_PROP_FPS,30)
import cv2
cam = cv2.VideoCapture(1)
cam.set(cv2.CAP_FFMPEG,True)
cam.set(cv2.CAP_PROP_FPS,30)
while(True):
ret,frame = cam.read()
cv2.imshow('frame',frame)
if (cv2.waitKey(1) & 0xFF == ord('q')):
break
cam.release()
cv2.destroyAllWindows()