opencv 截屏录屏

opencv截屏参考这篇文章:https://blog.csdn.net/qq_18984151/article/details/79231953

opencv录屏:

#include <iostream>	 
#include<opencv2/opencv.hpp>
#include <windows.h>
using namespace cv;
using namespace std;
HBITMAP	hBmp;
HBITMAP	hOld;
/*********************************************************************************/
//抓取当前屏幕的三个函数Screen(),HBitmapToMat(HBITMAP& _hBmp, Mat& _mat),printScreen()
void Screen() {
	//创建画板
	HDC hScreen = CreateDC("DISPLAY", NULL, NULL, NULL);
	HDC	hCompDC = CreateCompatibleDC(hScreen);
	//取屏幕宽度和高度
	int	nWidth = GetSystemMetrics(SM_CXSCREEN);
	int	nHeight = GetSystemMetrics(SM_CYSCREEN);
	//创建Bitmap对象
	hBmp = CreateCompatibleBitmap(hScreen, nWidth, nHeight);
	hOld = (HBITMAP)SelectObject(hCompDC, hBmp);
	BitBlt(hCompDC, 0, 0, nWidth, nHeight, hScreen, 0, 0, SRCCOPY);
	SelectObject(hCompDC, hOld);
	//释放对象
	DeleteDC(hScreen);
	DeleteDC(hCompDC);
}

//把HBITMAP型转成Mat型
BOOL HBitmapToMat(HBITMAP& _hBmp, Mat& _mat)
{
	//BITMAP操作
	BITMAP bmp;
	GetObject(_hBmp, sizeof(BITMAP), &bmp);
	int nChannels = bmp.bmBitsPixel == 1 ? 1 : bmp.bmBitsPixel / 8;
	int depth = bmp.bmBitsPixel == 1 ? IPL_DEPTH_1U : IPL_DEPTH_8U;
	//mat操作
	Mat v_mat;
	v_mat.create(cvSize(bmp.bmWidth, bmp.bmHeight), CV_MAKETYPE(CV_8U, nChannels));
	GetBitmapBits(_hBmp, bmp.bmHeight*bmp.bmWidth*nChannels, v_mat.data);
	_mat = v_mat;
	return TRUE;
}

void printScreen()
{
	int rate = 27;
	VideoWriter writer("1_1.avi", CV_FOURCC('M', 'J', 'P', 'G'), 5, Size(1960, 1080));
	Mat src;
	Mat dst;
	int i = 0;
    //录制时间
	while (i < 100) {
		//屏幕截图
		Screen();
		//类型转换
		HBitmapToMat(hBmp, src);
		//调整大小
		resize(src, dst, cvSize(1960, 1080), 0, 0);
		
		imshow("dst", dst);
		writer << dst;
		DeleteObject(hBmp);
		waitKey(rate);//这里调节帧数  现在27ms是1000/27帧
		i++;
	}
	
}
/******************************************************************************************************/
int main() {
	printScreen();
	return 0;
}

VideoWriter是写入视频类,VideoWriter writer("1_1.avi", CV_FOURCC('M', 'J', 'P', 'G'), 5, Size(1960, 1080));

主要参数是:文件保存路径(清空覆写,不是追加),视频类型,帧率,窗口大小(与图片大小必须一致)。

程序必须是自身自动关闭,强制关闭生成的视频会出现无法播放

猜你喜欢

转载自blog.csdn.net/qq_40238526/article/details/90442270