opencv进行视频读取和调用摄像头以及对采集到的图像进行闭环处理

调用摄像头这个程序遇到了很多问题,上天太眷顾我了,最后无意中把摄像头给调用出来了就在要奔溃的边缘上帝拉了我一把,调用摄像头进行视频的采集和系统调用视频的程序超不多,就是将VideoCapture capture(“视频文件”)变换成VideoCapture capture(0)Opencv就调用了摄像头,
1.进行定义的格式:
VideoCapture capture
capture.open(0);
为第一种方法先实例化在初始化
VideoCapture capture(0);
为第二种方法在实例化的同时初始化
编程过程:
1.调用opencv的头文件#include<opencv2/opencv.hpp>
2.使用cv来命名程序的存储空间
3.进入主程序
1.调用摄像头调用格式有上两种方式,常用的就是 VideoCapture capture(0)
2.循环显示摄像头采集的每一帧图像用while循环来做,在循环中定义一个图片格式的变量用来存储每一帧图像,
Mat frame;
读取当前的的帧
capture>>farme;
显示每一帧
imshow(“命名”,frame);摄像头采集到的图像显示
控制帧数
waitKey(delay);delay是控制图像显示的帧数
摄像头在开始的时候一直是处于调用状态就是不显示图像,这个可能是系统问题,经过查阅资料表明是dll文件没有粘贴到system文件中;
所对应的程序为:
#include<opencv2\opencv.hpp>
#include<opencv2\video\video.hpp>
using namespace cv;
int main()
{
VideoCapture capture(0);
//capture.open(0);
while(1)
{
Mat frame;
capture>>frame;
imshow(“电脑的摄像头采集”,frame);
waitKey(30);
}
return 2;
}
在Opencv中有一个VideoCapture类,来对视频显示以及调用摄像头。
VideoCapture是新增加的一个类文件对应之前CvCapture的一个结构体,VideoCapture也相当于是一个结构体,提供了从摄像机或视频文件捕获视频的C++接口,作用是从视频文件或者从摄像头捕获视屏并显示出来
1.对于结构体的调用有两种一种是常规的:
先实例化再初始化
1.VideoCapture capture;
定义结构体
2.capture.open(“视频文件”);
调用结构体中的枚举
2.另一种是一针见血的:
在实例化的同时在初始化
3.VideoCapture capture(“视频文件”);
第一种的简单理解是: int a;
a=1;
第二种的简单理解是: int a=1;
3.视屏读入到VideoCapture类中,紧接着一个循环将每一帧显示出来,利用循环来显示每一帧图像,
while(1){

               Mat frame;  定义一个Mat变量,用于存储每一帧图像循环进行显示
               capture>>frame;读取当前帧,把视频分成若干帧,起读取作用
               imshow("文件名",frame);  把每一帧图像显示出来
               waitKey(30);   把每一帧图像以30ms的速度连续起来成为视屏;                   

}
所依程序为:读取视频文件
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
VideoCapture capture;
capture.open(“e336ac53b560a9537e40e7bfac210f85.mp4”);
while(1)
{
Mat frame;
capture>>frame;
if(frame.empty())
{
break;
}
imshow(“快播”,frame);
waitKey(10);
}
return 0;
}

对摄像头采集到的图像进行图像处理:简言之就是机器视觉加图像处理了具体的实现过程有如下代码来做的:
1.调用opencv的头文件;
2.以cv来对程序空间进行命名处理
3.进入主函数
1.调用摄像头
2.定义存储图像的各种变量
3.利用循环来显示摄像头采集的每一帧图像,对每一帧图像进行灰度变换,灰度变换之后进行均值滤波对图像做模糊处理,最后利用Canny算子提取图像的边缘,等待按键的按下,控制图像采集的帧数。和摄像头采集图像的区别就是采集到图像之后对图像进行了相关计算
程序如下:
#include <opencv2/video/video.hpp>
using namespace cv;
int main()
{
VideoCapture capture(0);
//capture.open(0);
Mat edge;
while(1)
{
Mat frame;
capture>>frame;
cvtColor(frame,edge,CV_BGR2GRAY);
blur(edge,edge,Size(3,3));
Canny(edge,edge,0,30,3);
imshow(“边缘提取的图像”,edge);
//if(waitKey(30)>=0) break;
waitKey(30);
}
return 1;
}

猜你喜欢

转载自blog.csdn.net/nbxuwentao/article/details/85625471