opencv学习(二)

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;
	
}

运行结果。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值