1、图像读取与显示
新建一个cpp文件。
输入:
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main() {
//读取图片数据,选取读取图片颜色,默认是IMREAD_COLOR,也可以选择灰度图像IMREAD_GRAYSCALE
Mat I = imread("C:\\Users\\sunny\\Pictures\\Saved Pictures\\timg.jpg",IMREAD_COLOR);
//选取窗口类型建立窗口,也可以直接imshow默认建立窗口,默认建立窗口类型为WINDOW_AUTOSIZE
namedWindow("show",WINDOW_AUTOSIZE);
//显示图像
imshow("show", I);
//循环显示,等待键盘输入
waitKey(0);
//销毁所有窗口
destroyAllWindows();
return 0;
}
运行,显示图片。
2、视频读取
视频跟图像读取类似,区别就是视频是多张图片,需要用个while循环语句,是图片播放下去。
输入:
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main() {
/*视频读取与显示*/
//声明视频类
VideoCapture V;
//读取视频
V.open("E:\\opencv_study\\my_method_00.mp4");
if (V.isOpened()) {
cout << "视频中图像宽度:" << V.get(CAP_PROP_FRAME_WIDTH)<<endl;
cout << "视频中图像高度:" << V.get(CAP_PROP_FRAME_HEIGHT)<<endl;
cout << "视频帧率:" << V.get(CAP_PROP_FPS)<<endl;
cout << "视频总帧数:" << V.get(CAP_PROP_FRAME_COUNT)<<endl;
}
else
{
cout << "输入视频错误" << endl;
return -1;
}
while (1) {
//声明一个图片类别
Mat frame;
//通过位运算将图片按照视频顺序赋值
V >> frame;
//判断当前图片是否为空,为空跳出循环
if (frame.empty()) {
break;
}
//显示每张图片,给定一个延时,图片通过while循环达到视频效果
imshow("vider", frame);
waitKey(1000 / V.get(CAP_PROP_FPS));
}
waitKey();
destroyAllWindows();
return 0;
}
运行,显示结果,可以播放。
3、摄像头调用
调用摄像头很简单,我调用的是笔记本本身的摄像头,在申明类时候传参0进去就ok,其他基本都是跟视频读取一样。只是什么时候停止的判断语句改下,我改成按键“q”退出循环。
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main() {
/*调用摄像头*/
VideoCapture V(0);
while (true)
{
Mat frame;
V >> frame;
//按键输入"q"进入判断,跳出循环
if (char(waitKey(30)=='q') ){
break;
}
imshow("my_camera", frame);
}
return 0;
}
运行结果
4、数据保存
跟其他的数据保存都是一样的,只是换成了opencv的存储数据函数,比较简单。
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main() {
/*图片保存*/
//获取随机数字图像
Mat I=Mat::zeros(Size(300,400),CV_8UC3);
randn(I, Scalar::all(0),Scalar::all(255));
//保存图像
imwrite("E:\\opencv_study\\test.png", I);
Mat I2;
I2 = imread("E:\\opencv_study\\test.png");
imshow("image", I2);
waitKey();
destroyAllWindows();
}
运行结果
视频保存同理。
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main() {
/*视频保存*/
VideoCapture V(0);
Mat frame;
V >> frame;
//声明存储
VideoWriter W;
double fps = 25.0;
int codec = VideoWriter::fourcc('M', 'J', 'P', 'G');
//打开存储文件
W.open("E:\\opencv_study\\my_video.avi", codec, fps, frame.size(), true);
while (true)
{
V >> frame;
//存储每张图片
W.write(frame);
imshow("my_video", frame);
//按键"q"进入判断
if (char(waitKey(30)) == 'q') {
V.release();
W.release();
break;
}
}
return 0;
}
运行结果。