![opencv畫矩形框_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-10/27/a3a5483c-5b08-408d-a834-8c575b44bb97/a3a5483c-5b08-408d-a834-8c575b44bb971.gif)
![opencv畫矩形框_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-10/27/a3a5483c-5b08-408d-a834-8c575b44bb97/a3a5483c-5b08-408d-a834-8c575b44bb972.gif)
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、基礎(chǔ)學(xué)習(xí)筆記之ope ncv(5):實現(xiàn)鼠標選定矩形框opencvopencv 編寫程序中,用鼠標選定矩形框經(jīng)常用到。編程時看似很簡單的邏輯思路,如果對opencvopencv中的 RectRect 不是很了解的話,那實現(xiàn)的效果就不是特別理想,比如說雖然我們習(xí)慣性用鼠標從左上到右下 選擇,但是偶爾也會從左下到右上選擇等等 .開始自己實現(xiàn)這個功能后,發(fā)現(xiàn)寫的代碼比較繁瑣,ifif 語句太多。后面看了 opencvopencv 的例程后,感覺它的代碼效率非常高。下面就是用來練習(xí)下的。環(huán)境:opencv2.3.1+vs2010opencv2.3.1+vs2010功能:打開攝像頭,捕捉視頻圖像,用鼠標
2、選定視頻區(qū)域( (支持各種選擇習(xí)慣) )。代碼和注釋如下:1 #i nclude stdafx.h2 #in clude ope ncv2/imgproc/imgproc.hpp3 #in clude 4 #i nclude 5 #i nclude 6 #i nclude 77 using namespacecv;8 using n amespacestd;9Rect select10 bool select_flag=false;11 Poi nt orig in;12 Mat frame;1415/*/16/*如果采用這個 onMouse()函數(shù)的話,貝 U 只能畫出從左上到右下,或者從右
3、下到左上的矩形框*/17/*/18 /void onM ouse(i nt eve nt, int x,i nt y,i nt,void*)19/20/21 /22/23/24/25/26/27/if(event=CV_EVENT_LBUTTONDOWN) select.x=x;select.y=y;track ing=false;else if(eve nt=CV_EVENT_LBUTTONUP)28select.width=x-select.x;以下 2 行計算出來的值要么都大于 0,要么都小于 029 /select.height=y-select.y;30tracki ng=true;
4、左鍵完后,開始跟蹤31 /32/3334/*/35/*如果采用這個 onMouse()函數(shù)的話,貝 U可以畫出鼠標拖動矩形框的 4 種情形*/36/*/37 void onMouse(int eventjnt x,int y,int,void*)38 39/Poi nt origi n;不能在這個地方進行定義,因為這是基于消息響應(yīng)的函 數(shù),執(zhí)行完后 origin 就釋放了,所以達不到效果。40if(select_flag)4142selectx=MIN(origin.x,x); /不一定要等鼠標彈起才計算矩形框,而應(yīng) 該在鼠標按下開始到彈起這段時間實時計算所選矩形框43selecty=MIN(
5、origi n.y,y);44selectwidth=abs(x-origin.x); 算矩形寬度和高度45selectheight=abs(y-origi n. y);46selec &=Rect(0,0,frame.cols,frame.rows) 保證所選矩形框在視頻顯 示區(qū)域之內(nèi)4748if(eve nt=CV_EVENT_LBUTTONDOWN)4950select_flag=true;/鼠標按下的標志賦真值51orig in=Poi nt(x,y);保存下來單擊是捕捉到的點52selec=Rect(x,y,0,0);/這里一定要初始化,寬和高為(0,0)是因為在opencv
6、 中 Rect 矩形框類內(nèi)的點是包含左上角那個點的,但是不含右下角那個點5354elseif(eve nt=CV_EVENT_LBUTTONUP)5556select_flag=false;5758 5959 int main (i nt argc, un sig nedchar* argv)60 61char c;6362打開攝像頭63VideoCapture cam0);64if (!cam.isOpe ned()65return -1;6866/建立窗口67n amedWi ndow(camera,1);/ 顯示視頻原圖像的窗口7168/捕捉鼠標69setMouseCallbackcam
7、era,o nMouseQ);7470while(1)7172/讀取一幀圖像73camframe;74if(frame.empty()75return -1;8176畫出矩形框77recta ngle(frameselectScalar(255,0,0),3,8,0); 能夠?qū)崟r顯示在畫矩形窗口時的痕跡8478顯示視頻圖片到窗口79imshow(camera,frame);8780/ select.zeros();81鍵盤響應(yīng)82c=(char)waitKey( 20);83if(27=c)/ESC 鍵84return -1;859486return 0;87 程序如下:cpp view pl
8、aincopyprint?1./ drawBox.cpp :定義控制臺應(yīng)用程序的入口點2./3.3.#include stdafx.h4.#i nclude cv.h5.#i nclude highgui.h7.8.6.void my_mouse_callback(7.int eve nt, i nt x,i nt y,i nt flags,void *param);11.8.CvRect box;9.bool draw in g_box=false;10. void draw_box(lpllmage *img, CvRect rect)11. 12. cvRectangle(img,13.
9、 cvPoint(box.x,box.y),14. cvPoint(box.x+box.width,box.y+box.height),15. cvScalar(0 xff,0 x00,0 x00) /*red*/16. );17. 22.23.24. int _tmain( int argc, char * argv)25. 26. box=cvRect(-1,-1,0,0);27. IplImage *image=cvCreatelmage(28. cvSize(200,200),29. IPL_DEPTH_8U,30. 331. );32. cvZero(image);33. IplIm
10、age *temp=cvCloneImage(image);34. cvNamedWindow(Box Example);35. cvSetMouseCallback(36. Box Example,37. my_mouse_callback,38. (void *)image39. );40. while(1)41. 42. cvCopylmage(image,temp);43. if(drawing_box)draw_box(temp,box);44. cvShowlmage(Box Example,temp);45. if(cvWaitKey(15)=27) break;46. 47.
11、cvReleaselmage(&image);48. cvReleaseImage(&temp);49. cvDestroyWindow(Box Example);50. 51.52.51. void my_mouse_callback(52. int eve nt, int x,i nt y,i nt flags, void *param)53. 54. IplImage *image=(IplImage *)param;55. switch(event)56. 57. case CV_EVENT_MOUSEMOVE:58. if (drawing_box)59. box.width=x-box.x;60. box.height=y-box.y;61. 62. 63. break;64. case CV_EVENT_LBUTTONDOWN:65. draw in g_box=true;66. box=cvRect(x,y,0,0);67. 68. break;69. case CV_EVENT_LBUTTONUP:70. draw in g_b
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024民間借貸合同范本(28篇)
- 2025年農(nóng)村子女撫養(yǎng)費用分擔(dān)協(xié)議
- 2025年供電企業(yè)與用戶用電合作協(xié)議
- 2025年共同策劃健身房合作合同書
- 企業(yè)勞動合同協(xié)議2025年
- 2025年企業(yè)員工勞動合同補充協(xié)議范本
- 2025年鋁合金預(yù)拉伸厚板和蒙皮鋁合金板項目立項申請報告模范
- 2025年高性能陶瓷復(fù)合材料項目立項申請報告模板
- 2025年企業(yè)變更代理協(xié)議
- 2025年漲緊輪項目提案報告模板
- 中心醫(yī)院消防施工組織設(shè)計
- 港口自動化與智慧港口發(fā)展方向
- 人教版小學(xué)英語單詞表(完整版)
- 飛灰處置及資源化綜合利用項目可行性研究報告模板-備案拿地
- 2024年咨詢工程師考試大綱
- 免疫治療皮疹護理查房
- 2024年棉柔巾行業(yè)市場趨勢分析
- 黑龍江省哈爾濱市雙城區(qū)2024年八年級下冊物理期末經(jīng)典試題含解析
- 老年期譫妄課件
- 項目采購管理培訓(xùn)
- 河道保潔服務(wù)日常巡邏方案及措施
評論
0/150
提交評論