001-Opencv3之圖像顯示及視頻顯示、創建進度條

1、圖像顯示


using namespace std;
using namespace cv;

//顯示圖像
void main()
{
	Mat img = imread("E:/004-C++Opencv/OpencvLearning/public/123.jpg");
	if (img.empty()) return;
	namedWindow("ShowImg", WINDOW_AUTOSIZE);
	imshow("ShowImg", img);
	waitKey(0);
}

2、視頻讀取

#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;


void main()
{
	VideoCapture cap;
	cap.open("E:/004-C++Opencv/OpencvLearning/public/123.mp4");
	int fps = cap.get(CV_CAP_PROP_FPS);
	int framenum = cap.get(CV_CAP_PROP_FRAME_COUNT);
	cout << "幀率:" << fps << endl;
	cout << "總幀數:" << framenum << endl;
	Mat frame;
	while(1)/*for (;;)*/
	{
		cap >> frame;
		if (frame.empty())
		{
			break;
		}
		imshow("frame", frame);
		waitKey(1);//waitKey裏面的數字表示毫秒,等於也就是如果值爲1的話,相當於隔一毫秒顯示一幀
	}
	
}

3、讀寫視頻文件

#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

void main()
{
	VideoCapture cap("../public/123.mp4");
	double fps = cap.get(CAP_PROP_FPS);
	Size size((int)cap.get(CAP_PROP_FRAME_WIDTH), (int)cap.get(CAP_PROP_FRAME_HEIGHT));

	VideoWriter writer;
	writer.open("../public/polar.avi", CV_FOURCC('M', 'J', 'P', 'G'), fps, size);
	
	Mat frame;
	for (;;)
	{
		cap >> frame;
		if (frame.empty()) break;
		writer << frame;
	}
	writer.release();
}

4、創建進度條

int g_slider_position = 0;
int g_run = 1, g_donset = 0;
VideoCapture g_cap;

void onTrackbarSlide(int pos, void *)
{
	g_cap.set(CAP_PROP_POS_FRAMES, pos);
	if (!g_donset)
		g_run = 1;
	g_donset = 0;
}

void main()
{
	namedWindow("VI", WINDOW_AUTOSIZE);
    resizeWindow("VI", 500, 500);//設置窗口大小,前提是nameWindow第二個參數爲WINDOW_NORMAL
	g_cap.open("E:/004-C++Opencv/OpencvLearning/public/123.mp4");
	int frames = (int)g_cap.get(CAP_PROP_FRAME_COUNT);
	createTrackbar("POS", "VI", &g_slider_position, frames, onTrackbarSlide);
	Mat frame;
	while (true)
	{
		if (g_run != 0)
		{
			g_cap >> frame;
			if (frame.empty()) break;
			int current_pos = (int)g_cap.get(CAP_PROP_POS_FRAMES);
			g_donset = 1;

			setTrackbarPos("POS", "VI", current_pos);
			imshow("VI", frame);
			g_run -= 1;//作用:起到單步運行的效果,如果註釋則會直接播放視頻
		}
		char c = (char)waitKey(10);//10表示每10毫秒顯示一幀
		if (c == 's')
		{
			g_run = 1;// single step
		}
		if (c == 'r')
		{
			g_run = -1;
		}
		if (c == 27)
			break;
		
	}

}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章