opencv 截屏录屏

    xiaoxiao2022-07-03  156

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

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

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

    最新回复(0)