opencv(2020.3.31)

2020.3.31

opencv之入门篇

1.图像的读取

#include <opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(){
	Mat img;
	//0灰度图, 1原图
	img = imread("E:/test/project/testimgs/1.jpg", 0);
	if (img.empty()){
		cout << " it's empty" << endl;
		return -1;
	}
	imshow("img", img);
	waitKey(0);
	system("pause");
	return 0;

}

2.摄像头获取并保存视频

#include <opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(){
	Mat in_frame, out_frame;
	const char win1[] = "capture.", win2[] = "video";
	double fps = 60;//每秒的帧数
	char file_out[] = "video.avi";
	VideoCapture capture(0); 
	while(capture.isOpened()) { 
		
		//获取输入视频的宽度和高度
		int width = (int)capture.get(CAP_PROP_FRAME_WIDTH);
		int height = (int)capture.get(CAP_PROP_FRAME_HEIGHT);
		VideoWriter recVid(file_out, VideoWriter::fourcc('M', 'J', 'P', 'G'), fps, Size(width, height));
		namedWindow(win1);
		namedWindow(win2);
		capture >> in_frame;
		cvtColor(in_frame, out_frame,COLOR_BGR2GRAY);
		recVid << out_frame;
		imshow(win1, in_frame);// 在窗口中显示帧
		imshow(win2, out_frame); // 在窗口中显示帧
		if (waitKey(1000 / fps) >= 0)
			break;
	}
	capture.release(); 
	system("pause");
	return 0;
}


3.视频读取

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;

void main() {
	VideoCapture cap("1.mp4");
	if (!cap.isOpened()) {
		cout << "输入错误" << endl;
		return;
	}
		
	int width = cap.get(CAP_PROP_FRAME_WIDTH);  //帧宽度
	int height = cap.get(CAP_PROP_FRAME_HEIGHT); //帧高度
	int frameRate = cap.get(CAP_PROP_FPS);  //帧率 x frames/s
	int totalFrames = cap.get(CAP_PROP_FRAME_COUNT); //总帧数

	cout << "视频宽度=" << width << endl;
	cout << "视频高度=" << height << endl;
	cout << "视频总帧数=" << totalFrames << endl;
	cout << "帧率=" << frameRate << endl;

	Mat frame;
	while (1){
		cap >> frame;//等价于cap.read(frame);
		if (frame.empty())
			break;
		imshow("video", frame);
		if (waitKey(20) > 0)
			break;
	}
	cap.release();
}

4.摄像头帧处理显示

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;

void main() {
	VideoCapture cap;
	cap.open(0); 

	if (!cap.isOpened())
		return;
	Mat frame,outframe;
	while (true){
		cap >> frame;
		cvtColor(frame, outframe,COLOR_BGR2HSV);
			break;
		imshow("video", outframe);
		if (waitKey(20) > 0)
			break;
	}
	cap.release();
	destroyAllWindows();
}

5.简单的视频播放器

#include<opencv2/opencv.hpp>
#include<iostream>
#include<string>
using namespace cv;
using namespace std;


Mat image;   //读入视频帧的Mat
string windowName = "1.mp4"; //播放窗口名称
string trackBarName = "播放进度";    //trackbar控制条名称
double totalFrame = 1.0;     //视频总帧数
double currentFrame = 1.0;    //当前播放帧
int trackbarValue = 1;    //trackbar控制量
int trackbarMax = 255;   //trackbar控制条最大值
double frameRate = 1.0;  //视频帧率
VideoCapture video;    //声明视频对象
double controlRate = 0.1;

//控制条回调函数
void TrackBarFunc(int, void(*));
int main(){
	video.open("1.mp4");
	if (!video.isOpened())
	{
		cout << "Failed to open video" << endl;
	}
	totalFrame = video.get(CAP_PROP_FRAME_COUNT);  //获取总帧数
	frameRate = video.get(CAP_PROP_FPS);   //获取帧率
	double pauseTime = 1000 / frameRate; // 由帧率计算两幅图像间隔时间
	namedWindow(windowName);
	//在图像窗口上创建控制条
	createTrackbar(trackBarName, windowName, &trackbarValue, trackbarMax, TrackBarFunc);
	TrackBarFunc(0, 0);
	while (true){
		video.read(image);
		resize(image, image, Size(500, 400)); //调整图像大小,视频在我的显示器上显示不全
		imshow(windowName, image);  //显示图像
		waitKey(pauseTime);   //图像间隔
		controlRate++;
		if (controlRate > totalFrame) {
			break;
		}

	}
	video.release();  //释放视频,C++中不写也无碍,可以自动释放
	waitKey();
	return 0;
}
void TrackBarFunc(int, void(*)){
	controlRate = (double)trackbarValue / trackbarMax * totalFrame; //trackbar控制条对视频播放进度的控制
	video.set(CAP_PROP_POS_FRAMES, controlRate);	 //设置当前播放帧
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值