国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

OpenCV實現鼠標在圖像上框選單目標和多目標

2020-01-26 13:25:36
字體:
來源:轉載
供稿:網友

本文實例為大家分享了OpenCV實現鼠標框選并顯示框選區域的具體代碼,供大家參考,具體內容如下

鼠標在圖像上框選目標:

1. 用到鼠標回調函數

2. 回調函數里面分三部分

 (1)鼠標按下左鍵

 (2)鼠標按下的同時移動左鍵

 (3)鼠標左鍵彈起

3. 圖像顯示的刷新

單目標:

#include <cv.h>#include <highgui.h>#include <stdio.h> IplImage* src = 0; IplImage* tmp = 0; void on_mouse( int event, int x, int y, int flags, void* ustc){ static CvPoint pre_pt = {-1,-1}; static CvPoint cur_pt = {-1,-1}; CvFont font; cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5, 0, 1, CV_AA);//初始化字體 char temp[16];  if( (event == CV_EVENT_LBUTTONDOWN)&&(flags) )//鼠標左鍵按下時 { sprintf(temp,"(%d,%d)",x,y);//格式化字符串 pre_pt = cvPoint(x,y);//獲取當前點坐標值 cvPutText(src,temp, pre_pt, &font, cvScalar(0,0, 0, 255));//在圖像是打印字符 cvCircle( src, pre_pt, 2,cvScalar(255,0,0,0) ,CV_FILLED, CV_AA, 0 );//在圖像上畫圓 cvShowImage( "src", src ); //cvCopy(src,tmp);//這句有沒有,就是單目標和多目標的問題  } else if( (event == CV_EVENT_MOUSEMOVE) && (flags & CV_EVENT_LBUTTONDOWN)) {//鼠標移動并且鼠標左鍵按下 sprintf(temp,"(%d,%d)",x,y);//格式化字符串 cur_pt = cvPoint(x,y);//獲取當前點坐標值  cvPutText(src,temp, cur_pt, &font, cvScalar(0,0, 0, 255));//在圖像是打印字符 cvRectangle(src, pre_pt, cur_pt, cvScalar(0,255,0,0), 2, 8, 0 );//在圖像上畫矩形 cvShowImage( "src", src ); cvCopy(tmp,src);//將img復制到臨時圖像tmp上,用于實時顯示 } else if( event == CV_EVENT_LBUTTONUP ) {//鼠標左鍵彈起 sprintf(temp,"(%d,%d)",x,y);//字體格式化 cur_pt = cvPoint(x,y);//獲取當前點坐標值  cvPutText(src,temp, cur_pt, &font, cvScalar(0,0, 0, 255));//在圖像是打印字符 cvCircle( src, cur_pt, 2,cvScalar(255,0,0,0) ,CV_FILLED, CV_AA, 0 );//在圖像上畫圓 cvRectangle( src, pre_pt, cur_pt, cvScalar(0,255,0,0), 2, 8, 0 );//在圖像上畫矩形 cvShowImage( "src", src ); }}int main(){ src=cvLoadImage("lena.jpg",1);//讀入圖像 tmp=cvCloneImage(src);//復制圖像到臨時圖像上 cvNamedWindow("src",1);//新建窗口 cvSetMouseCallback( "src", on_mouse, 0 );//注冊鼠標響應回調函數  cvShowImage("src",src);//顯示圖像 cvWaitKey(0);//等待按鍵按下  cvDestroyAllWindows();//銷毀所有窗口 cvReleaseImage(&src);//釋放圖像 cvReleaseImage(&tmp);//釋放圖像 return 0;} 

 

多目標:

#include <cv.h>#include <highgui.h>#include <stdio.h> IplImage* src = 0; IplImage* tmp = 0; void on_mouse( int event, int x, int y, int flags, void* ustc){ static CvPoint pre_pt = {-1,-1}; static CvPoint cur_pt = {-1,-1}; CvFont font; cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5, 0, 1, CV_AA);//初始化字體 char temp[16];  if( (event == CV_EVENT_LBUTTONDOWN)&&(flags) )//鼠標左鍵按下時 { sprintf(temp,"(%d,%d)",x,y);//格式化字符串 pre_pt = cvPoint(x,y);//獲取當前點坐標值 cvPutText(src,temp, pre_pt, &font, cvScalar(0,0, 0, 255));//在圖像是打印字符 cvCircle( src, pre_pt, 2,cvScalar(255,0,0,0) ,CV_FILLED, CV_AA, 0 );//在圖像上畫圓 cvShowImage( "src", src ); cvCopy(src,tmp);//這句有沒有,就是單目標和多目標的問題 } else if( (event == CV_EVENT_MOUSEMOVE) && (flags & CV_EVENT_LBUTTONDOWN)) {//鼠標移動并且鼠標左鍵按下 sprintf(temp,"(%d,%d)",x,y);//格式化字符串 cur_pt = cvPoint(x,y);//獲取當前點坐標值  cvPutText(src,temp, cur_pt, &font, cvScalar(0,0, 0, 255));//在圖像是打印字符 cvRectangle(src, pre_pt, cur_pt, cvScalar(0,255,0,0), 2, 8, 0 );//在圖像上畫矩形 cvShowImage( "src", src ); cvCopy(tmp,src);//將img復制到臨時圖像tmp上,用于實時顯示 } else if( event == CV_EVENT_LBUTTONUP ) {//鼠標左鍵彈起 sprintf(temp,"(%d,%d)",x,y);//字體格式化 cur_pt = cvPoint(x,y);//獲取當前點坐標值  cvPutText(src,temp, cur_pt, &font, cvScalar(0,0, 0, 255));//在圖像是打印字符 cvCircle( src, cur_pt, 2,cvScalar(255,0,0,0) ,CV_FILLED, CV_AA, 0 );//在圖像上畫圓 cvRectangle( src, pre_pt, cur_pt, cvScalar(0,255,0,0), 2, 8, 0 );//在圖像上畫矩形 cvShowImage( "src", src ); }}int main(){ src=cvLoadImage("lena.jpg",1);//讀入圖像 tmp=cvCloneImage(src);//復制圖像到臨時圖像上 cvNamedWindow("src",1);//新建窗口 cvSetMouseCallback( "src", on_mouse, 0 );//注冊鼠標響應回調函數  cvShowImage("src",src);//顯示圖像 cvWaitKey(0);//等待按鍵按下  cvDestroyAllWindows();//銷毀所有窗口 cvReleaseImage(&src);//釋放圖像 cvReleaseImage(&tmp);//釋放圖像 return 0;}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 陇川县| 罗田县| 凤庆县| 措美县| 吉隆县| 大同市| 永城市| 抚宁县| 双峰县| 疏勒县| 新干县| 江陵县| 滨海县| 霍林郭勒市| 大安市| 桑日县| 奇台县| 安多县| 衡南县| 化德县| 成安县| 深圳市| 彭阳县| 巴彦县| 博罗县| 敦化市| 临高县| 永德县| 乐清市| 五华县| 封开县| 临江市| 湄潭县| 金塔县| 广宁县| 丰都县| 遵义县| 泰安市| 湄潭县| 同仁县| 女性|