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混合编程之---画图工具 画直线 画圆 画矩形的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: counting sort (计数排序)
- 下一篇: 极路由 1S 使用经验