欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

opencv利用鼠標滑動畫出多彩的形狀

 更新時間:2020年08月19日 15:47:19   作者:比卡丘不皮  
這篇文章主要為大家詳細介紹了opencv利用鼠標滑動畫出多彩的形狀,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

今天沒有繼續(xù)學習新知識點,畫出了一個隨鼠標畫出的 圖形,知識點全都是之前學的,話不多說,先上圖:

代碼部分: 

// opencvMouse.cpp : 定義控制臺應用程序的入口點。
//
 
#include "stdafx.h"
#include <iostream>
#include <opencv2/opencv.hpp>
 
using namespace cv;
using namespace std;
 
#define WINDOW_NAME "【窗口程序】"
 
void on_MouseHandle(int event,int x, int y, int flages, void * param);
void DrawRectangle(cv::Mat & img, cv::Rect box);
 
//全局變量
Rect g_rectangle;
bool g_bDrawingBox = false; //是否進行繪制
RNG rng(12345);
 
int main()
{
 //【1】準備參數(shù)
 Mat srcImage(600,800,CV_8UC3), tempImage;
 srcImage.copyTo(tempImage);
 g_rectangle = Rect(-1, -1, 0, 0);
 srcImage = Scalar::all(0);
 
 //【2】設置鼠標操作做回調(diào)函數(shù)
 namedWindow(WINDOW_NAME);
 setMouseCallback(WINDOW_NAME, on_MouseHandle, (void*)&srcImage);
 
 //【3】程序主循環(huán),當進程繪制的標識符為真時,進行繪制
 while (true)
 {
 srcImage.copyTo(tempImage); //復制源圖到臨時變量
 if (g_bDrawingBox)
 {
 DrawRectangle(tempImage, g_rectangle);
 }
 imshow(WINDOW_NAME, tempImage);
 if (waitKey(10) == 27) //按下ESC建,程序退出
 {
 break;
 }
 }
 return 0;
}
 
void on_MouseHandle(int event, int x, int y, int flages, 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;
 //對寬和高小于0的處理
 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;
 }
 //調(diào)用函數(shù)進行繪制
 DrawRectangle(image, g_rectangle);
 }
 break;
 }
}
 
void DrawRectangle(cv::Mat & img, cv::Rect box)
{
 rectangle(img, box.tl(), box.br(), Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255))); //隨機顏色
}

里面就使用通過:

setMouseCallback(WINDOW_NAME, on_MouseHandle, (void*)&srcImage);

鼠標的操作來實現(xiàn)繪圖.

第一個參數(shù): const string& 類型為winname,窗口的名字

第二個參數(shù):MouseCallBack類型的onMouse,指定窗口里每次鼠標時間發(fā)生的時候調(diào)用的函數(shù)指針

第三個參數(shù): void*  用戶定義的傳遞到回調(diào)函數(shù)的參數(shù),默認為0

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++實現(xiàn)Huffman的編解碼

    C++實現(xiàn)Huffman的編解碼

    這篇文章主要為大家詳細介紹了C++實現(xiàn)Huffman的編解碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • QT通過C++線程池運行Lambda自定義函數(shù)流程詳解

    QT通過C++線程池運行Lambda自定義函數(shù)流程詳解

    最近在接觸公司的一個QT桌面項目,其中里面有一個模塊是使用線程池去運行自定義函數(shù)的,自己潛心研究那個線程池代碼一天,發(fā)現(xiàn)研究不透,看不懂,里面幾乎都是使用C++11的新特性進行編寫
    2022-10-10
  • 聊聊c++數(shù)組名稱和sizeof的問題

    聊聊c++數(shù)組名稱和sizeof的問題

    這篇文章主要介紹了c++數(shù)組名稱和sizeof,介紹了一維數(shù)組名稱的用途及二維數(shù)組數(shù)組名,通過示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-01-01
  • C++實現(xiàn)通訊錄小功能

    C++實現(xiàn)通訊錄小功能

    這篇文章主要為大家詳細介紹了C++實現(xiàn)通訊錄小功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C語言數(shù)據(jù)結(jié)構(gòu)之隊列的定義與實現(xiàn)

    C語言數(shù)據(jù)結(jié)構(gòu)之隊列的定義與實現(xiàn)

    隊列是一種特殊的線性表,特殊之處在于它只允許在表的前端(head)進行刪除操作,而在表的后端(tail)進行插入操作。本文將詳細講講C語言中隊列的定義與實現(xiàn),感興趣的可以了解一下
    2022-07-07
  • udp socket客戶端和udp服務端程序示例分享

    udp socket客戶端和udp服務端程序示例分享

    這篇文章主要介紹了udp socket客戶端和udp服務端程序示例,需要的朋友可以參考下
    2014-03-03
  • opencv實現(xiàn)圖形輪廓檢測

    opencv實現(xiàn)圖形輪廓檢測

    這篇文章主要為大家詳細介紹了opencv實現(xiàn)圖形輪廓檢測,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • C/C++編譯器GCC下的常用編譯命令總結(jié)

    C/C++編譯器GCC下的常用編譯命令總結(jié)

    這篇文章主要介紹了C/C++編譯器GCC下的常用編譯命令總結(jié),本文的示例環(huán)境為Linux系統(tǒng),需要的朋友可以參考下
    2015-08-08
  • C++如何調(diào)用matlab函數(shù)

    C++如何調(diào)用matlab函數(shù)

    這篇文章主要介紹了C++如何調(diào)用matlab函數(shù)的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-11-11
  • OpenCV實現(xiàn)圖像角點檢測

    OpenCV實現(xiàn)圖像角點檢測

    這篇文章主要為大家詳細介紹了OpenCV實現(xiàn)圖像角點檢測,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01

最新評論