Opencv3從頭開始(八)軌跡條回調與鼠標回調

Opencv3從頭開始(八)軌跡條回調與鼠標回調

軌跡條回調

createTrackbar("二值化","二值化",&threshold_val,255,on_trackbar);
on_trackbar(threshold_val, 0);
//軌跡條回調函數
void on_trackbar(int, void*){
    threshold(image_gray,image_thre,threshold_val,255,THRESH_BINARY);
    imshow("二值化",image_thre);  
}

在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
鼠標回調

    //鼠標回調函數
    namedWindow("鼠標",WINDOW_AUTOSIZE);
    setMouseCallback("鼠標",on_mouse,0);
//鼠標回調函數
void on_mouse( int event, int x, int y, int, void* ){
    
    if(event==CV_EVENT_LBUTTONDOWN){
        flag=1;
        rect=Rect(x,y,0,0);
    }
    else if(event==EVENT_MOUSEMOVE){
        if(flag==1){
            rect.width=x-rect.x;
            rect.height=y-rect.y;
        }
    }
    else if(event==CV_EVENT_LBUTTONUP){
        flag=0;
        rect.width=x-rect.x;
        rect.height=y-rect.y;
      	rectangle(image,rect,Scalar(rng.uniform(0,255),rng.uniform(0,255),rng.uniform(0,255)),2,8,0);
    }
    imshow("鼠標",image);
}

在這裏插入圖片描述代碼如下:

/*
createTrackbar函數創建和使用軌跡條
SetMouseCallback鼠標回調函數
*/

#include<opencv2/opencv.hpp>
#include<opencv2/imgproc.hpp>
#include<opencv2/imgcodecs.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<iostream>

void on_trackbar(int, void*);
void on_mouse( int event, int x, int y, int, void* );

using namespace std;
using namespace cv;

Mat image,image_gray,image_thre;
Rect rect;

int threshold_val= 125;
int flag=0;
RNG rng(12345);

int main(int argc, char* argv[]){
    //灰度
    image=imread("倉老師.jpg");
    cvtColor(image,image_gray,COLOR_BGR2GRAY);
    imshow("倉老師",image);
    rect=Rect(-1,-1,0,0);
    //創建回調條
    namedWindow("二值化",WINDOW_AUTOSIZE);
    createTrackbar("二值化","二值化",&threshold_val,255,on_trackbar);
    on_trackbar(threshold_val, 0);
    //鼠標回調函數
    namedWindow("鼠標",WINDOW_AUTOSIZE);
    setMouseCallback("鼠標",on_mouse,0);
    
    waitKey(0);
    return 0;
}
//軌跡條回調函數
void on_trackbar(int, void*){
    threshold(image_gray,image_thre,threshold_val,255,THRESH_BINARY);
    imshow("二值化",image_thre);  
}

//鼠標回調函數
void on_mouse( int event, int x, int y, int, void* ){
    
    if(event==CV_EVENT_LBUTTONDOWN){
        flag=1;
        rect=Rect(x,y,0,0);
    }
    else if(event==EVENT_MOUSEMOVE){
        if(flag==1){
            rect.width=x-rect.x;
            rect.height=y-rect.y;
        }
    }
    else if(event==CV_EVENT_LBUTTONUP){
        flag=0;
        rect.width=x-rect.x;
        rect.height=y-rect.y;
        rectangle(image,rect,Scalar(rng.uniform(0,255),rng.uniform(0,255),rng.uniform(0,255)),2,8,0);
    }
    imshow("鼠標",image);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章