我是靠谱客的博主 耍酷柜子,最近开发中收集的这篇文章主要介绍关于虚拟机下Linux的opencv获取摄像头图像问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近在虚拟机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 -msse3
LINKFLAGS = -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 source
VIDEOSOURCE = 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,便可以正常工作。


最后

以上就是耍酷柜子为你收集整理的关于虚拟机下Linux的opencv获取摄像头图像问题的全部内容,希望文章能够帮你解决关于虚拟机下Linux的opencv获取摄像头图像问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部