C++ OpenCV识别我的相机,但无法读取
我已经在一个计算机视觉项目上工作了一段时间,现在使用我笔记本电脑的网络摄像头(它显示为“高清网络摄像头”,分辨率为640x480),但我想将这个程序与我的DJI-Inspire1无人机的摄像头配合使用。摄像头被识别并打开,但无法从中读取图像 更详细地说: 在“我的播放器”类中,加载摄影机功能: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
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
}
}