opencv鼠标操作,画矩形
生活随笔
收集整理的這篇文章主要介紹了
opencv鼠标操作,画矩形
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
opencv鼠標操作,畫矩形
效果圖
主要兩個函數在作用
//-------------------全局函數聲明部分------------------------- //描述:全局函數的聲明 //----------------------------------------//鼠標處理函數 void on_MouseHandle(int event, int x, int y, int flags, void* param); //畫矩形框函數 void DrawRectangle(cv::Mat& img, cv::Rect box);源代碼
/ Mouse.cpp : 此文件包含 "main" 函數。程序執行將在此處開始并結束。 //#include "pch.h" #include <iostream> #include<opencv2/opencv.hpp> using namespace cv;//窗口的宏定義 #define WINDOW_NAME "程序窗口"//-------------------全局函數聲明部分------------------------- //描述:全局函數的聲明 //----------------------------------------void on_MouseHandle(int event, int x, int y, int flags, void* param); void DrawRectangle(cv::Mat& img, cv::Rect box);//-------------------全局變量聲明部分------------------------- //描述:全局變量的聲明 //---------------------------------------- Rect g_rectangle;//存放要畫的矩形的信息 bool g_bDrawingBox = false;//是否進行繪制 RNG g_rng(12345);//這是一個定值,里面可以是g_rng(123)也可以int main() {//std::cout << "Hello World!\n"; //準備參數g_rectangle = Rect(-1, -1, 0, 0);Mat srcImage(600, 800, CV_8UC3), tempImage;srcImage.copyTo(tempImage);g_rectangle = Rect(-1, -1, 0, 0);srcImage = Scalar::all(0);//設置鼠標操作回調函數namedWindow(WINDOW_NAME);setMouseCallback(WINDOW_NAME, on_MouseHandle, (void*)&srcImage);//程序主循環,當進行繪制的標識符為真,進行繪制while (1){srcImage.copyTo(tempImage);//復制源圖到臨時變量if (g_bDrawingBox)DrawRectangle(tempImage, g_rectangle);imshow(WINDOW_NAME, tempImage);if (waitKey(10) == 27)//按下ESC鍵,程序退出break;}return 0; }//-------------------on_MouseHandle()函數------------------------- //描述:鼠標回調函數,根據不同的鼠標事件進行不同的操作 //----------------------------------------void on_MouseHandle(int event, int x, int y, int flags, void* param) {Mat image = *(cv::Mat*) param;switch (event){//鼠標移動消息case EVENT_MOUSEMOVE:{if (g_bDrawingBox)//如果進行繪制的標識符為真,就記錄長和寬到RECT型變量中{g_rectangle.width = x - g_rectangle.x;g_rectangle.height = y - g_rectangle.y;}}break;//左鍵按下消息case EVENT_LBUTTONDOWN:{g_bDrawingBox = true;g_rectangle = Rect(x, y, 0, 0);//記錄起始點}break;case EVENT_LBUTTONUP://鼠標彈起,{g_bDrawingBox = false;//標識符為false//對寬和高小于零的處理if (g_rectangle.width < 0){g_rectangle.x += g_rectangle.width;g_rectangle.width *= -1;}if (g_rectangle.height< 0){g_rectangle.y += g_rectangle.height;g_rectangle.height *= -1;}//調用函數進行繪制DrawRectangle(image, g_rectangle);//繪制矩形}break;} }//-------------------DrawRectangle()函數------------------------- //描述:自定義的矩形繪制函數 //----------------------------------------void DrawRectangle(cv::Mat& img, cv::Rect box) {rectangle(img, box.tl(), box.br(), Scalar(g_rng.uniform(0, 255), g_rng.uniform(0, 255), g_rng.uniform(0, 255)));//隨機顏色繪制 }總結
以上是生活随笔為你收集整理的opencv鼠标操作,画矩形的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用社保怎么贷款
- 下一篇: 台湾国立大学郭彦甫Matlab教程笔记(