C++ OpenCV识别我的相机,但无法读取

C++ OpenCV识别我的相机,但无法读取,c++,opencv,camera,C++,Opencv,Camera,我已经在一个计算机视觉项目上工作了一段时间,现在使用我笔记本电脑的网络摄像头(它显示为“高清网络摄像头”,分辨率为640x480),但我想将这个程序与我的DJI-Inspire1无人机的摄像头配合使用。摄像头被识别并打开,但无法从中读取图像 更详细地说: 在“我的播放器”类中,加载摄影机功能: capture.open(-1); // this opens a window with a combobox showing all //the cameras i have. Sele

我已经在一个计算机视觉项目上工作了一段时间,现在使用我笔记本电脑的网络摄像头(它显示为“高清网络摄像头”,分辨率为640x480),但我想将这个程序与我的DJI-Inspire1无人机的摄像头配合使用。摄像头被识别并打开,但无法从中读取图像

更详细地说:

在“我的播放器”类中,加载摄影机功能:

 capture.open(-1);     // this opens a window with a combobox showing all 
 //the cameras i have. Selecting the DJI camera fails 
 //the read while selecting the webcam fails and crashes.
 // capture.open(0); opens the webcam succesfully
 // capture.open(1); 
open(1)似乎试图打开DJI摄像头,但给出的值与 打开(-1)并在读取帧后崩溃(这些帧完全是 黑色720x480 CV_8UC3)在调试模式下,它在读取带有分段错误的帧时崩溃,并指向“DriverProc”(我猜?)的disassembly和带有movdqa命令的行

 // capture.open(2); oddly also seems to try and open DJI-camera now with 
 // 720x486 resolution resulting in a black 720x486 CV_8UC3 image (no crashes).   
 // anything above open(2) fails and crashes 
 if(capture.isOpened()){
     // in here i check the values of different properties, they are:
     //                               open(-1)     open(1)      open(2)     HD WEBCAM  
     //    CV_CAP_PROP_FORMAT =       0            -1           -1          -1
     //    CV_CAP_PROP_FRAME_WIDTH =  720          720          720         640
     //    CV_CAP_PROP_FRAME_HEIGHT = 486          480          486         480
     //    CV_CAP_PROP_FOURCC =       1.49883e+09  -4.66163e+08 -4.66163e08 8.44715e+08
     //    CV_CAP_PROP_FPS =          30           0            0           0
 }
接下来是player类的主循环(在自己的线程上)

因此,基本上分辨率是720x486或720x480,这很奇怪,似乎有三个摄像头连接在一起,但带有capture的列表中,open(-1)仅显示2个。open(2)将成功加载一幅黑色图像:P。我确信相机正在工作,因为我可以在其他应用程序(如“Livestream Studio”)中查看它。视频通过无线方式从摄像机传输到控制器(我想分辨率会降低到720),再从那里传输到HDMI->USB3.0转换器,再从那里传输到PC。在谷歌搜索之后,我发现开放(-1)版本的fourcc代码1.49883e+09确实是Blackmagic使用的“2VUY”,这很有意义。但我能找到-4.66163e08的含义

我使用的是openCV 3.0.0、minGW4.92 32位、Qt5.5.0


那么有没有人知道问题出在哪里呢?我完全没有主意了

相机应该传输什么分辨率?你说你认为分辨率降低了?(首先,我要找出视频的分辨率。)最后,你传输视频的格式是什么?@Rootix我无法控制传输的视频,但有一个设置显示NTSC,所以当在cam viewer应用程序“dvdrive”中打开时上面写着720x486,所以我想是这样,但应用程序也只是显示了一个黑屏。摄像头在opencv之外是否正常工作?另外,我看到您在使用mingw,除了在gcc+linux上,您是否尝试过相同的代码?我发现opencv和摄像机在windows上可能会很挑剔。@Rootix是的,它在“livestream studio”中工作得很好,但在“DVDRIVE”中却不行。恐怕我从未尝试过linux:(@Rootix我怀疑它与blackmagic hdmi到usb3转换器有关…相机应该传输什么分辨率?你说你认为分辨率降低了?(我先看看视频的分辨率。)最后,您以什么格式传输视频?@Rootix我无法控制传输的视频,但有一个设置显示NTSC,因此,当在cam viewer应用程序“dvdrive”中打开时上面写着720x486,所以我想是这样,但应用程序也只是显示了一个黑屏。摄像头在opencv之外正常工作吗?另外,我看到你在使用mingw,除了在gcc+linux上,你有没有尝试过相同的代码?我发现opencv和摄像头在windows上可能会很挑剔。@Rootix是的,它在“livestream studio”中工作得很好,但在windows中没有“dvdriver”。恐怕我从未尝试过linux:(@Rootix我怀疑它与blackmagic hdmi到usb3转换器有关。。。
while(!stop){
     // this is the command that tries to read the next frame
     if(!capture.read(frame)){
          // this happens for the open(-1) version
     }
}