日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1.1.2-学习Opencv与MFC混合编程之---画图工具 画直线 画圆 画矩形

發布時間:2025/3/17 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1.1.2-学习Opencv与MFC混合编程之---画图工具 画直线 画圆 画矩形 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

源代碼地址:http://download.csdn.net/detail/nuptboyzhb/3961685

畫圖工具


1.???? 畫直線

?? 增加‘直線’菜單項,建立類向導;

?? 對CXXXXXXView類增加成員變量my_draw_flag.并在構造函數中初始化為0

?? 在‘直線’菜單項處理函數中,將my_draw_flag=1;表示畫直線

?? 增加window消息處理,WM_LBUTTONDOWN 和WM_MOUSEMOVE和WM_LBUTTONUP

?? 增加成員變量

在構造函數里初始化為0;

增加int型成員變量OnLButtonDownRunFlag,OnLButtonUpRunFlag。并在View類的構造函數中進行初始化為0;

增加IplImage型成員變量

?? 在OnLButtonDown(UINT nFlags, CPoint point)函數中,保存鼠標按下時的點:

my_cvpoint1=cvPoint(point.x,point.y);

?????? OnLButtonDownRunFlag=1;

OnLButtonUpRunFlag=0;

bufImg=cvCloneImage(workImg);//bufImg是為了保存每次畫圖結束后的圖像。

?? 在OnMouseMove(UINT nFlags, CPoint point)函數中,編輯代碼如下:

if(OnLButtonDownRunFlag&&OnLButtonUpRunFlag==0)

????? {

???????????? CvPointiner_point=cvPoint(point.x,point.y);

???????????? IplImage*src;

???????????? if(!workImg)

???????????? {

??????????????????? return;

???????????? }

???????????? intthickness,colorR,colorG,colorB;

???????????? thickness=2;//線條寬度

???????????? colorR=0;

???????????? colorG=255;

???????????? colorB=0;

???????????? src=cvCloneImage(bufImg);

???????????? switch(my_draw_flag)

???????????? {

???????????? case0:

??????????????????? break;

???????????? case1:

??????????????????? cvFlip(src);

??????????????????? cvLine(src,my_cvpoint1,iner_point,cvScalar(colorR,colorG,colorB),thickness);

??????????????????? cvFlip(src);

??????????????????? workImg=cvCloneImage(src);//顯示當前一條直線

??????????????????? Invalidate();//重繪

??????????????????? break;

???????????? }

???????????? cvReleaseImage(&src);

????? }

?????? CScrollView::OnMouseMove(nFlags,point);

?? 鼠標按下的消息處理函數

void CCVMFCView::OnLButtonUp(UINTnFlags, CPoint point)

???? OnLButtonUpRunFlag=1;

?????? ?? OnLButtonDownRunFlag=0;

?

?

畫矩形

1.????添加畫‘矩形’菜單項

2.????設置屬性如下:

3.????建立類向導,編輯消息響應函數:

void CCVMFCView::OnMyDrawRectangle()

{

????? //TODO: Add your command handler code here

????? my_draw_flag=2;

}

4.????在mousemove消息響應函數里,添加

cvFlip(src);

cvRectangle(src,my_cvpoint1,iner_point,cvScalar(colorR,colorG,colorB),thickness);

cvFlip(src);

workImg=cvCloneImage(src);//顯示當前的矩形

??????? Invalidate();//重繪


畫圓


添加菜單的步驟同添加矩形的步驟:

關鍵是編寫case 3:的代碼

?????? case 3:

???????????????????? int r=0;

???????????????????? r=(int)sqrt((iner_point.x-my_cvpoint1.x)*(iner_point.x-my_cvpoint1.x)

??????????????????????????? +(iner_point.y-my_cvpoint1.y)*(iner_point.y-my_cvpoint1.y));

???????????????????? cvFlip(src);

???????????????????? cvCircle(src,my_cvpoint1,r,cvScalar(colorB,colorG,colorR),thickness);

???????????????????? cvFlip(src);

???????????????????? workImg=cvCloneImage(src);//顯示當前的矩形

???????????????????? Invalidate();//重繪

???????????????????? break;


?

from:http://blog.csdn.net/nupt123456789/article/details/7100144

新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!

總結

以上是生活随笔為你收集整理的1.1.2-学习Opencv与MFC混合编程之---画图工具 画直线 画圆 画矩形的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。