實現螢幕截圖需要用到 windows api,所以需要包括windows.h
標頭檔案。同時我們想要對截圖做進一步的處理,就需要用到 opencv。關於 opencv 的安裝與編譯可以參見 《再整理:visual studio code(vscode)下的基於c++的opencv的最新搭建攻略解析》,親測有效,但是 opencv 還有 mingw 的版本最好和部落格中保持一致,不然編譯可能會失敗。下面進入正題。
screenshot.h
#pragma once
#include #include class screenshot
;
在截圖之前需要獲取螢幕的解析度,一種很直觀的想法就是呼叫getsystemmetrics(sm_c*screen)
函式來獲取寬度或者高度。如下圖所示,設定螢幕縮放 125% 之後,得到的值會偏小。如果是1920 × 1080
的解析度,getsystemmetrics(sm_cxscreen)
和getsystemmetrics(sm_cyscreen)
返回解析度會是(1920, 1080) / 1.25 = (1536, 864)
。所以我們需要先計算螢幕的縮放率。這個任務由screenshot::getzoom()
完成。剩下的步驟注釋中解釋的很充分了,不再贅述。
/* 獲取整個螢幕的截圖 */
mat screenshot::getscreenshot()
/** @brief 獲取指定範圍的螢幕截圖
* @param x 影象左上角的 x 座標
* @param y 影象左上角的 y 座標
* @param width 影象寬度
* @param height 影象高度
*/mat screenshot::getscreenshot(int x, int y, int width, int height)
/* 獲取螢幕縮放值 */
double screenshot::getzoom()
對於1920 × 1080
的解析度,截一次屏在 30ms 左右,下面是測試**:
#include "screenshot.h"
using namespace cv;
int main()
使用Python和OpenCV實現SIFT與ORB
目錄如下 目錄orb pratice.py 相關理論 import cv2 import numpy as np 該程式使用dataset中的1.jpg和2.jpg,使用sift對這2張進行特徵檢測和特徵提取,使用暴力匹配法對這2張進行特徵匹配,最後計算匹配程度較高的特徵點的單應性矩陣 讀取 建立s...
C語言實現截圖
gdi 截圖函式 引數 hwnd 要截圖的視窗控制代碼 引數 dirpath 截圖存放目錄 引數 filename 截圖名稱 int captureimage hwnd hwnd,const char dirpath,const char filename 通過視窗dc 建立乙個相容位圖 hbmsc...
imadjust使用opencv實現
實現函式功能 j low out high out low out i low in high in low in gamma cpp view plain copy print iplimage imageadjust iplimage src,iplimage dst,double low in...