滑鼠截圖
在圖上做标記時,opencv主要用setMouseCallback()這個函數,下面來講解:
一、setMouseCallback()
void setMousecallback(const string& winname, MouseCallback onMouse, void* userdata=0)
winname:視窗的名字;userdate:傳給回調函數的參數;
onMouse:滑鼠響應函數,回調函數。指定視窗裡每次滑鼠事件發生的時候,被調用的函數指針。 這個函數的原型為:
void on_Mouse(int event, int x, int y, int flags, void* param);
event是 CV_EVENT_*變量之一
x和y是滑鼠指針在圖像坐标系的坐标(不是視窗坐标系)
flags是CV_EVENT_FLAG的組合, param是使用者定義的傳遞到setMouseCallback函數調用的參數。
//常用的event:
#define CV_EVENT_MOUSEMOVE//移動
#define CV_EVENT_LBUTTONDOWN //左鍵按下
#define CV_EVENT_RBUTTONDOWN //右鍵按下
#define CV_EVENT_LBUTTONUP //左鍵擡起
#define CV_EVENT_RBUTTONUP //右鍵擡起
例程:
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv; //不需要每次都輸入 cv::
Mat ROI; Point pt;//滑鼠截取圖像的一部分
bool flag = false;
Mat img = imread("121.jpg");
Mat img_copy = img.clone();//clone 是完全的深拷貝,在記憶體中申請新的空間,與A獨立
void onMouse(int event, int x, int y, int flag, void*) {
switch (event)
{
case CV_EVENT_LBUTTONDOWN://左鍵按下
flag = true;
pt.x = x;
pt.y = y;
break;
case CV_EVENT_MOUSEMOVE://滑鼠移動
if (flag) { //隻有在點選滑鼠左鍵的情況下移動滑鼠才執行
img_copy.copyTo(img);
//以便永遠隻有一個矩形(否則許多矩形會重疊在一起),清除之前在img圖像上,滑鼠移動産生的矩形框,隻保留最終的一個矩形框
rectangle(img, pt, Point(x, y), Scalar(255, 0, 0), 2, 8);//定義一個矩形框,pt表示起始點(按下左鍵時的滑鼠左标);Point表示實時變化的坐标點;顔色;線寬;線型
}
break;
case CV_EVENT_LBUTTONUP://左鍵擡起
flag = false;
ROI = img_copy(Rect(pt.x, pt.y, x - pt.x, y - pt.y));//x,y,寬,高
imshow("ROI", ROI);
//imwrite("filename",ROI);
break;
default:
break;
}
}
void main(){
namedWindow("mouse", CV_WINDOW_AUTOSIZE);
setMouseCallback("mouse", onMouse, 0); //每次滑鼠放在圖中區域,就會觸發onMouse函數
while (1) {
imshow("mouse", img);
if (27 == waitKey(20))//按ESC鍵退出(esc鍵對應的ascall碼是27)
break;
}
}
結果:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHLz0kaNFTRE90dNpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL3EzMxMDM1ETM4ITMwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
from:https://www.cnblogs.com/little-monkey/p/7197115.html