如何使用 C 和 OpenCV 實現截圖

2022-09-09 05:21:11 字數 1446 閱讀 2066

實現螢幕截圖需要用到 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...