opencv 마우스 슬라이딩 으로 다채로운 모양 그리 기

오늘 은 새로운 지식 을 계속 배우 지 않 고 마우스 로 그린 것 을 그 렸 다. 도형,지식 포 인 트 는 모두 전에 배 운 것 이 고 말 을 많이 하지 않 으 며 먼저 그림 을 그린다.

코드 부분: 

// 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】    
 Mat srcImage(600,800,CV_8UC3), tempImage;
 srcImage.copyTo(tempImage);
 g_rectangle = Rect(-1, -1, 0, 0);
 srcImage = Scalar::all(0);
 
 //【2】           
 namedWindow(WINDOW_NAME);
 setMouseCallback(WINDOW_NAME, on_MouseHandle, (void*)&srcImage);
 
 //【3】     ,            ,    
 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;
 }
 //        
 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);
마우스 동작 으로 그림 을 그립 니 다.
첫 번 째 인자:const string&형식 은 winname 이 고 창의 이름 입 니 다.
두 번 째 인자:Mouse CallBack 형식의 onMouse,마우스 시간 이 발생 할 때마다 호출 되 는 함수 포인터 지정
세 번 째 인자:void*  사용자 정의 반전 함수 에 전 달 된 매개 변 수 는 기본 값 은 0 입 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기