虚拟机上使用 opecnv 读取USB摄像头无法显示

时间:2021-11-08 18:24:18

使用opecv读取USB摄像头时候,无法显示图像。

设置

首先查看虚拟机Ubuntu检测摄像头是否已正常插入:

ls /dev/video*

结果为:
虚拟机上使用 opecnv 读取USB摄像头无法显示

设置虚拟机USB属性:
虚拟机上使用 opecnv 读取USB摄像头无法显示
USB的兼容性设置为USB3.0

虚拟机上使用 opecnv 读取USB摄像头无法显示
将USB连接到虚拟机上。

程序

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <time.h>
#include <math.h>
#include <sys/ioctl.h>
#include <linux/fb.h>
#include <iostream>
#include <signal.h>
#include <string>
#include <iostream>


#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;




int main()
{
    VideoCapture capture(1);
    if(capture.isOpened())
    {
        cout<<"success"<<endl;
    }

    Mat frame;
    while (capture.isOpened())
    {   
    capture >> frame;
    if (!frame.empty()) 
        {
            //imshow("edges", frame);
        imwrite("test.bmp",frame);
        imshow("capture", frame);
        //cout<<"can get ";
        }
        else
        {
            //cout<<"can not get";
        }

        if(waitKey(10) == 27)
            break;               
    }


    return 0;
}

Makefile


LIBS += -L /usr/lib/ -lstdc++ 
LIBS += `pkg-config --libs opencv`

TARGET = test

target:
    $(CC) $(CFLAGS) -o  $(TARGET)   $(SRCS) $(INC) $(LIBS) 
        #*****************finished building*****************

clean:
    rm -f $(TARGET)  

成功打开:
虚拟机上使用 opecnv 读取USB摄像头无法显示

注意
capture(0)是笔记本摄像头,capture(1)是USB摄像头。