c++ opencv+vs studio2017读取摄像头

先说结论,在windows7+X64平台上使用vs studio 2017读取摄像头遇到一个问题就是.

CvCapture_MSMF::initStream Failed to set mediaType (stream 0, (640x480 @ 30) MFVideoFormat_RGB24(unsupported media type)

最后发现是在调用VideoCapture类open摄像头时的参数默认情况下是bool open(int index, int apiPreference = CAP_ANY),但是问题就出出现在这里,出现这个错误时不使用默认值,需要显示的指定参数CAP_DSHOW,代码如下:

#include <iostream>
#include <opencv2\highgui.hpp>
#include <opencv2\core.hpp>
#include <opencv2\imgcodecs.hpp>

using namespace cv;
using namespace std;
int main()
{
    //读取图片并显示出来
    //Mat image;
    //image = imread("D:/VS2017_project/image_cv/mm.jpeg"); //后缀名不区分大小写 路径可以协程这样也可以写为D:\\VS2017_project\\image_cv\\ss.jpg
    //if (image.empty())
    //{
    //    cout << "cannot open or find image" << endl;
    //    system("pause");
    //    return -1;
    //}
    //namedWindow("Display window", WINDOW_NORMAL);
    //resizeWindow("Display window",1000,500);
    //imshow("Display window", image);
    //waitKey(0);
    //system("pause");

    //读取摄像头数据
    namedWindow("video", WINDOW_AUTOSIZE);
    Mat image; //mat中文意思矩阵
    VideoCapture video;  //视频抓取类
    bool isopen = video.open(0, CAP_DSHOW);//当出现上文出现的错误时,使用CAP_DSHOW
    if (!isopen)
        cout << "open  camero failed" << endl;
    else
        cout << "open  camero success" << endl;

    cout << video.isOpened() << endl;
    while (1)
    {
        bool ret = video.read(image); //读取图像帧
        if (!ret)
        {
            cout << "grab from video failed" << endl;
            break;
        }
        
        imshow("video", image); //图像帧显示,需指明图像帧显示的窗口名称和图像帧
        int key = waitKey(1);  //指定1ms刷新一个图像帧,并且该函数能返回鼠标或者键盘的返回
        if (key == 'q')
            break;
        
    }
    cout << "while break" << endl;
    video.release();  //释放资源
    destroyAllWindows(); //释放资源
    system("pause");
    return 0;
}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值