<span style="font-family: Arial, Helvetica, sans-serif;">#include <stdio.h></span>
#include <cv.h>
#include <cxcore.h>
#include <highgui.h> int main( int argc, char** argv )
{
//声明IplImage指针
IplImage* pFrame = NULL;
IplImage* pFrImg = NULL;
IplImage* pBkImg = NULL; CvMat* pFrameMat = NULL;
CvMat* pFrMat = NULL;
CvMat* pBkMat = NULL; CvCapture* pCapture = NULL;
// int nFrmNum = 0; //创建窗体
cvNamedWindow("video", 1);
cvNamedWindow("background",1);
cvNamedWindow("foreground",1);
//使窗体有序排列
cvMoveWindow("video", 30, 0);
cvMoveWindow("background", 360, 0);
cvMoveWindow("foreground", 690, 0); if( argc > 2 )
{
fprintf(stderr, "Usage: bkgrd [video_file_name]\n");
return -1;
} //打开摄像头
if (argc ==1)
if( !(pCapture = cvCaptureFromCAM(0)))
{
fprintf(stderr, "Can not open camera.\n");
return -2;
} //打开视频文件
if(argc == 2)
if( !(pCapture = cvCaptureFromFile(argv[1])))
{
fprintf(stderr, "Can not open video file %s\n", argv[1]);
return -2;
} //逐帧读取视频
while(pFrame = cvQueryFrame( pCapture ))
{
nFrmNum++; //假设是第一帧。须要申请内存。并初始化
if(nFrmNum == 1)
{
pBkImg = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U,1);
pFrImg = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U,1); pBkMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);
pFrMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);
pFrameMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1); //转化成单通道图像再处理
cvCvtColor(pFrame, pBkImg, CV_BGR2GRAY);
cvCvtColor(pFrame, pFrImg, CV_BGR2GRAY); cvConvert(pFrImg, pFrameMat);
cvConvert(pFrImg, pFrMat);
cvConvert(pFrImg, pBkMat);
}
else
{
cvCvtColor(pFrame, pFrImg, CV_BGR2GRAY);
cvConvert(pFrImg, pFrameMat);
//高斯滤波先,以平滑图像
//cvSmooth(pFrameMat, pFrameMat, CV_GAUSSIAN, 3, 0, 0); //当前帧跟背景图相减
cvAbsDiff(pFrameMat, pBkMat, pFrMat); //二值化前景图
cvThreshold(pFrMat, pFrImg, 60, 255.0, CV_THRESH_BINARY); //进行形态学滤波,去掉噪音
//cvErode(pFrImg, pFrImg, 0, 1);
//cvDilate(pFrImg, pFrImg, 0, 1); //更新背景
cvRunningAvg(pFrameMat, pBkMat, 0.003, 0);
//将背景转化为图像格式。用以显示
cvConvert(pBkMat, pBkImg); //显示图像
cvShowImage("video", pFrame);
cvShowImage("background", pBkImg);
cvShowImage("foreground", pFrImg); //假设有按键事件,则跳出循环
//此等待也为cvShowImage函数提供时间完毕显示
//等待时间能够依据CPU速度调整
if( cvWaitKey(2) >= 0 )
break; } } //销毁窗体
cvDestroyWindow("video");
cvDestroyWindow("background");
cvDestroyWindow("foreground"); //释放图像和矩阵
cvReleaseImage(&pFrImg);
cvReleaseImage(&pBkImg); cvReleaseMat(&pFrameMat);
cvReleaseMat(&pFrMat);
cvReleaseMat(&pBkMat);
cvReleaseCapture(&pCapture); return 0;
}

还是那段代码。昨天弄懂了main函数參数表中argcHe argv 的含义,假设直接编译执行的话相当于在命令行输入try.exe ,即argc为1。

转到命令行执行

结果

结果让选择视频源。点击确定之后就直接秒退了。查阅开发文档资料得知 cvCreateCameraCapture(int index) 函数能够选择摄像头,但实际測试发现 cvCaptureFromCAM仅仅接受 –1 和 0 两种參数,然后就把-1改动成了0,结果能够正常打开摄像头了

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hhb3NoZW55dXRvdQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

详细原因我也没有搞清楚,查了Opencv的官方文档:

OpenCV中一个函数。初始化从摄像头中获取视频
CvCapture*cvCaptureFromCAM( int index );
  • index
  • 要使用的摄像头索引。

    假设仅仅有一个摄像头或者用哪个摄像头也无所谓,那使用參数-1应该便能够。

函数给从摄像头的视频流分配和初始化CvCapture结构。眼下在Windows下可使用两种接口:Video forWindows(VFW)和Matrox Imaging Library(MIL);Linux下也有两种接口:V4L和FireWire(IEEE1394)。

也没有说的非常具体。问题有待研究..

另外要说的一点是,假设要打开要处理的视频文件。最简单把avi视频放在exe文件同样文件夹下。在命令行输入如 try2.exe 123.avi就可以。

OpenCV打开摄像头失败的更多相关文章

  1. opencvbase 实现opencv打开摄像头和初步处理等效果操作(附源码)

    // TwoCameraOnTimer2Dlg.cpp : 实现文件 /* CvMat, Mat, IplImage之间的互相转换 IpIImage -> CvMat CvMat mathead ...

  2. 如何使用 OpenCV 打开摄像头获取图像数据?

    OpenCV 如何打开摄像头获取图像数据? 代码运行环境:Qt 5.9.1 msvc2015 32bit OpenCV 3.3.0 #include "include/opencv2/ope ...

  3. opencv打开摄像头获取视频程序

    // // main.cpp // opencv3 // // Created by PKU on 14-9-16. // Copyright (c) 2014年 PKU. All rights re ...

  4. opencv 打开摄像头(c++)

    1,打开视频文件 2,打开IP摄像头 读取大华摄像头 大华的网络摄像头编号:DH-IPC-HFW1225M-I1-0600B,用的是RTSP协议. "rtsp://admin:dahua@1 ...

  5. ubantu打开摄像头失败

    摘要-针对ubantu20 sudo apt install v4l-utils v4l2-ctl --list-devices - cv2 install on ubantu20```针对ubant ...

  6. opencv打开摄像头并新建窗口显示

    几个程序使用的基本函数如下: ******************************************************************* cvCreateCameraCap ...

  7. Opencv打开摄像头,读不到图像,一般来说先读取第一帧,舍弃,然后就正常了

    舍弃第一帧的程序: cap >> img; cv::waitKey(100);  if (cvWaitKey(5) == 27) break; cap >> img;

  8. 项目实战:Qt+Ffmpeg+OpenCV相机程序(打开摄像头、支持多种摄像头、分辨率调整、翻转、旋转、亮度调整、拍照、录像、回放图片、回放录像)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  9. 基于opencv网络摄像头在ubuntu下的视频获取

     基于opencv网络摄像头在ubuntu下的视频获取 1  工具 原料 平台 :UBUNTU12.04 安装库  Opencv-2.3 2  安装编译运行步骤 安装编译opencv-2.3  参 ...

随机推荐

  1. 使用node成功安装完某插件typescript后,在使用时提示:tsc(或xxx)不是内部或外部命令,也不是可运行的程序或批处理文件

    具体出错情形: 使用npm安装typescript明明安装成功,但在使用时一直报错,报错语句为  tsc不是内部或外部命令,也不是可运行的程序或批处理文件 具体出错原因: node未正确安装,或相关环 ...

  2. HDU 1166 线段树模板&树状数组模板

    HDU1166 上好的线段树模板&&树状数组模板 自己写的第一棵线段树&第一棵树状数组 莫名的兴奋 线段树: #include <cstdio> using nam ...

  3. 记录一个MySQL的问题

    昨天做asp.net mvc程序,用mysql.data.entity.ef6做数据连接. 程序都是正常的,但就是提交数据的时候总是提示 Specified key was too long; max ...

  4. RFC1867 HTTP file upload

    RFC1867 HTTP file upload RFC1867 is the standard definition of that "Browse..." button tha ...

  5. Spring boot -环境搭建 ,初步接触(1)

    1. Eclipse 创建 maven project  项目目录如下: 2. pom.xml  配置文件 <project xmlns="http://maven.apache.or ...

  6. Java_Web之状态管理

    回顾及作业点评: (1)JSP如何处理客户端的请求? 使用response对象处理响应 (2)请描述转发与重定向有何区别? 转发是在服务器端发挥作用,通过forward方法将提交信息在多个页面间进行传 ...

  7. svn命令行批量删除和批量添加

    svn命令行批量删除和批量添加 如果使用svn的命令行,例如在linux下的终端中使用,svn的添加命令是svn add,删除命令是svn del,但是缺乏批量的操作,如果我在资源管理器中,手动添加了 ...

  8. jq 替换DOM layeui 不刷新

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. java源码

    Java泛型中的标记符含义: K - Key(键) V - Value(值) E - Element (在集合中使用,因为集合中存放的是元素) T - Type(Java 类,可做泛型) N - Nu ...

  10. 【转载】解决方案:git@github.com出现Permission denied (publickey)

    遇到的问题 今天心血来潮,想将intellij上的项目代码放到GitHub上管理. 在进行添加远程库的时候,出现了:git@github.com出现Permission denied (publick ...