1. 程式人生 > >0009-利用setMouseCallback函式實現滑鼠對圖片視窗的操作!

0009-利用setMouseCallback函式實現滑鼠對圖片視窗的操作!

本程式實現滑鼠對圖片視窗的操作。
本程式利用setMouseCallback函式將影象視窗與對應的滑鼠處理函式對映起來!
在這個程式中
①當滑鼠左鍵在影象上某點點選時,顯示這個點的座標,並在影象上該點處劃圓; 
②當滑鼠左鍵沒有按下時,滑鼠移動時,則會顯示滑鼠所在點的實時座標;
③當滑鼠左鍵按下不放並且滑鼠移動時,則在影象上劃矩形,當滑鼠放開後,則會把相應的矩形區域提取出來顯示在另一個視窗中。程式比較簡單,這裡就不用文字說明怎麼實現了,大家一看程式碼便知怎麼用了!
程式碼如下
程式碼中用到的影象下載連結:http://pan.baidu.com/s/1miSMDmg 密碼:rhs5

//opencv版本:OpenCV3.0
//VS版本:VS2013
//Author:qxsf321.net

#include <opencv2/imgproc/imgproc.hpp>    
#include <opencv2/imgproc/types_c.h>   
#include <opencv2/core/core.hpp>          
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/highgui/highgui_c.h>
#include <iostream>

using namespace cv;

cv::Mat org, dst, img, tmp;
void on_mouse(int event, int x, int y, int flags, void *ustc)//event滑鼠事件代號,x,y滑鼠座標,flags拖拽和鍵盤操作的代號 


{
        //on_mouse函式的程式碼請搜尋公眾號"qxsf321",關注後回覆0009即可獲取
        //on_mouse函式的程式碼請搜尋公眾號"qxsf321",關注後回覆0009即可獲取
        //on_mouse函式的程式碼請搜尋公眾號"qxsf321",關注後回覆0009即可獲取
}
void main()
{
        org = imread("1.jpg");
        org.copyTo(img);
        org.copyTo(tmp);
        namedWindow("img");//定義一個img視窗  
        setMouseCallback("img", on_mouse, 0);//呼叫回撥函式  
        imshow("img", img);
        cv::waitKey(0);
}


程式碼執行結果我這裡錄了個視訊,視訊線上觀看連結

https://v.youku.com/v_show/id_XMjk3MTYyMjM3Ng==.html?spm=a2h3j.8428770.3416059.1
大家在看視訊的時候記得選擇高清模式哦
不方便線上看的我給大家這個視訊的網盤下載連結
連結:http://pan.baidu.com/s/1geYgrlx 密碼:db75