关于虚拟机下Linux的opencv获取摄像头图像问题

来源:互联网 发布:mac os x 10.11.6 cdr 编辑:程序博客网 时间:2024/04/30 21:03

最近在虚拟机Ubuntu14.04下运行PTAM。

配置过程参考:http://makaidong.com/zhuquan945/1/129074_12259634.html

在最后运行时想使用购买外接USB摄像头(YUYV)进行实验,但发现怎么也读取不到图片(官网下载的Code)Linux下的makefile文件的更改

CC = g++COMPILEFLAGS =  -I /usr/include -I /usr/local/include -D_LINUX -D_REENTRANT -Wall  -O3 -march=nocona -msse3LINKFLAGS = -L /usr/local/lib -lGVars3 -lcvd -lopencv_legacy -lopencv_core -lopencv_video -lopencv_highgui -lGLU -lGL -llapack -lblas -lgfortran# Edit this line to change video sourceVIDEOSOURCE = VideoSource_Linux_V4L.o
读取的图片为虚拟机的桌面图片:
                                    

    对后面的问题进行查验后,又经过多次调试发现:仅将虚拟机的USB接口改为3.0的该Code可正常运行(知道这个结果的喔整个人都不好了 ,就这样浪费了我超长时间,不过也对OPENCV的读取问题有了进一步发现)。

一开始尝试很多次觉得是系统的V4L工作有问题,变想更改为用opencv的方式读取摄像头信息。

在git上下载了:https://github.com/jonazpiazu/PTAM  由opencv的读取文件 VideoSource_Linux_OpenCV.cc 。

make后运行仍然只能读取桌面图象。(非摄像头问题,在window下尝试了可正常捕获图片)便尝试在kdevelop下单独编写opencv的获取摄像头的程序,发现一直都不出图片,select time out  所以显示图片和一片黑。针对该问题最终找到了解决方案:https://stackoverflow.com/questions/15177313/accessing-a-webcam-from-pyside-opencv

即需要添加延时,由充足的时间对图像进行捕获(延时也不必过长)。在While下可正常获得图片帧流。变将其转到PTAM的VideoSource_Linux_OpenCV.cc下尝试发现仍然不行。后来将While语句改为顺序语句发现需要先读取几帧(该几帧显示为黑),然后后面才可以正常进行,单独的opencv尝试代码如下:

#include <iostream>
#include<opencv2/core/core.hpp>#include<opencv2/highgui/highgui.hpp>using namespace std;int main(int argc, char **argv) {    std::cout << "Hello, world!" << std::endl;    /*void *mptr = new cv::VideoCapture(0);cv::VideoCapture* cap = (cv::VideoCapture*)mptr;if(!cap->isOpened()){cerr << "Unable to get the camera" << endl;exit(-1);}cv::Mat frame;(*cap).read(frame);      //第一次 也可将read 用 >>cv::imshow("1",frame);cv::waitKey(1);(*cap).read(frame);     //第二次   前俩次读取显示为全黑图cv::imshow("1",frame);cv::waitKey(1);(*cap).read(frame);     //第三次  从此处开始后有图cv::imshow("1",frame);cv::waitKey(1);cv::waitKey(0);    */    cv::VideoCapture capture(0);    if (!capture.isOpened()){cout << "create camera capture error" << endl;exit(-1);    }    cv::Mat img;    capture>>img;    cv::imshow("image", img);    cv::waitKey(1);//必须加一个延时  第一次无图    capture>>img;    cv::imshow("image", img);    cv::waitKey(1);//必须加一个延时  开始有图    cv::waitKey(0);    return 0;}


对该问题进行了总结:首先注意USB是不是3.0  我的主要问题就是这个,

                                    然后opencv的话应该注意第几帧才可以在正常读取图片以及时间的延时(在window下没有该问题 可能是虚拟机造成的原因),

                                    在PTAM的官方 Code下我没有进行延时和读取前几帧的操作,只是把虚拟机的USB改为3.0,便可以正常工作。


阅读全文
0 0
原创粉丝点击