1.1.3-学习Opencv与MFC混合编程之---画图工具 通过对话框进行工具的参数设置 画曲线 绘图校正
源代码:http://download.csdn.net/detail/nuptboyzhb/3961688
l 对话框
1.“插入”->“资源”->“对话框”
2.对话框属性如下:
双击对话框,建立对话框类。取名:LineParameter
3.在LineParameter.h头文件中添加#include "resource.h",否则:会报错:IDD_DIALOG4未定义
4.为LineParameter类增加如下成员变量:
int m_colorR;
int m_colorG;
int m_colorB;
int m_PenWidth;
5.在构造函数中,初始化变量:
LineParameter::LineParameter(CWnd*pParent /*=NULL*/)
: CDialog(LineParameter::IDD, pParent)
{
//{{AFX_DATA_INIT(LineParameter)
// NOTE: the ClassWizard will addmember initialization here
//}}AFX_DATA_INIT
//初始化数据
m_colorB=0;
m_colorG=0;
m_colorR=0;
m_PenWidth=1;
}
6.在数据交换函数里,交换成员变量与相应控件的数据:
voidLineParameter::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(LineParameter)
// NOTE: the ClassWizard will addDDX and DDV calls here
DDX_Text(pDX, IDC_COLOR_R,m_colorR);
DDV_MinMaxInt(pDX,m_colorR, 0, 255);
DDX_Text(pDX, IDC_COLOR_G,m_colorG);
DDV_MinMaxInt(pDX,m_colorG, 0, 255);
DDX_Text(pDX, IDC_COLOR_B,m_colorB);
DDV_MinMaxInt(pDX,m_colorB, 0, 255);
DDX_Text(pDX, IDC_WIDTH, m_PenWidth);
DDV_MinMaxInt(pDX, m_PenWidth, 1, 50);
//}}AFX_DATA_MAP
}
7.为确认按键添加消息处理函数:
voidLineParameter::OnOK()
{
// TODO: Add extra validation here
UpdateData(TRUE); // 把控件上的数据写入成员变量
if ((m_colorR>=0&&m_colorR<=255)&&(m_colorG>=0&&m_colorG<=255)&&(m_colorB>=0&&m_colorB<=255))
{
CDialog::OnOK(); // 关闭对话框
}
else
{
MessageBox("请输入0-255之间的数字", "错误提示", MB_ICONEXCLAMATION | MB_OK);
}
}
l 使用对话框
1. 在CXXXXXXView类中增加成员变量,并在构造函数中进行初始化;
int m_LineWidth;
int m_ColorB;
int m_ColorG;
int m_ColorR;
2. 分别在‘直线’,‘圆’,‘矩形’菜单项的消息处理函数里添加LineParameter对话框对象;并将对话框输入的数据传递给相应的成员变量:
LineParameter dlg;
if(dlg.DoModal() != IDOK)
{
return;
}
m_ColorR=dlg.m_colorR;
m_ColorG=dlg.m_colorG;
m_ColorB=dlg.m_colorB;
m_LineWidth=dlg.m_PenWidth;
//删除对话框
deletedlg;
3. 修改OnMouseMove消息处理函数,将CXXXXView类的相应成员变量值赋值于画图所需的参数,(RGB颜色和线宽)
画图准确定的校正问题:
问题的提出:
运行结果表明:鼠标按下的点,与图像上显示的点有较大的差距。而鼠标移动时的点,和图像上的点完全一致。因此考虑将第一次鼠标移动后的点作为画线的起始点:
1. 添加CXXXXView成员变量,OnMouseMoveFlag,用于记录鼠标移动的次数。在构造函数里将其初始化为0;
2. 每次运行OnMouseMove消息处理函数,该标志加一。
3. 当OnMouseMoveFlag的时候,将此时的点,保存到起始点:
my_cvpoint1=cvPoint(point.x,point.y);
4. 为防止OnMouseMoveFlag增加过快而溢出,在此后的语句中将其赋值为3,:OnMouseMoveFlag=3;
5. 在每次鼠标按下和鼠标抬起时均初始化该变量
OnMouseMoveFlag=0;
画曲线
1. 增加‘曲线’菜单项;设置相应的属性,添加类向导,编辑消息响应函数:
voidCCVMFCView::OnMyDrawCurve()
{
// TODO: Add your command handler code here
my_draw_flag=4;
LineParameter dlg;
if (dlg.DoModal() != IDOK)
{
return;
}
m_ColorR=dlg.m_colorR;
m_ColorG=dlg.m_colorG;
m_ColorB=dlg.m_colorB;
m_LineWidth=dlg.m_PenWidth;
//删除对话框
deletedlg;
}
2. 修改OnMouseMove消息处理函数。增加case 4:的消息处理:
case 4://当选择画曲线时
cvFlip(workImg);
cvLine(workImg,my_cvpoint1,iner_point,cvScalar(colorB,colorG,colorR),thickness);
cvFlip(workImg);
my_cvpoint1=cvPoint(point.x,point.y);
Invalidate();//重绘
break;
from:http://blog.csdn.net/nupt123456789/article/details/7100150
1.1.3-学习Opencv与MFC混合编程之---画图工具 通过对话框进行工具的参数设置 画曲线 绘图校正的更多相关文章
- 1.1.5-学习Opencv与MFC混合编程之---画图工具 输入文字和填充图像 修改光标
源代码:http://download.csdn.net/detail/nuptboyzhb/3961696 输入文字 l 对话框 1. 插入,资源,选择对话框资源 2. 编辑对话框如下: ...
- 1.1.4-学习Opencv与MFC混合编程之---画图工具 画椭圆
源代码地址:http://download.csdn.net/detail/nuptboyzhb/3961690 1. 增加‘椭圆’菜单项,设置属性,添加类向导: 2. 编辑消息处理函数, ...
- 1.1.2-学习Opencv与MFC混合编程之---画图工具 画直线 画圆 画矩形
源代码地址:http://download.csdn.net/detail/nuptboyzhb/3961685 画图工具 1. 画直线 Ø 增加‘直线’菜单项,建立类向导: Ø 对CXX ...
- 1.1-学习Opencv与MFC混合编程之---利用画图函数,生成视频,并写入视频文件
源代码地址:http://download.csdn.net/detail/nuptboyzhb/3961674 写视频文件 Ø 新建菜单项,Learning OpenCV——> OpenCVr ...
- 1.0.x-学习Opencv与MFC混合编程之---视频运动检测
源代码地址: http://download.csdn.net/detail/nuptboyzhb/3961668 版本1.0.x新增内容 视频运动检测 Ø 新建菜单项,Learning OpenCV ...
- 1.0.3-学习Opencv与MFC混合编程之---打开本地摄像头
源代码:http://download.csdn.net/detail/nuptboyzhb/3961643 版本1.0.3新增内容 打开摄像头 Ø 新建菜单项,Learning OpenCV——&g ...
- 1.0.2-学习Opencv与MFC混合编程之---为播放AVI视频添加滑动条
源代码地址:http://download.csdn.net/detail/nuptboyzhb/3961642 版本1.0.2新增内容 Ø 全局变量和函数的添加: 在CVMFCview.cpp文件 ...
- 1.0.1-学习Opencv与MFC混合编程之---播放AVI视频
资源源代码:http://download.csdn.net/detail/nuptboyzhb/3961639 版本1.0.1新增内容 Ø 新建菜单项,Learning OpenCV——> ...
- 1.1.7-学习Opencv与MFC混合编程之---为画图工具添加工具栏
源代码:http://download.csdn.net/detail/nuptboyzhb/3961701 哎,其实里面有很多图片的,本来看起开很明了的,资源连接里有详细的文档,比下面的看的舒服的多 ...
随机推荐
- STL之vector详解
一.vector容器的自增长 首先,我们知道vector容器是由数组做出来的:它具备了数组的优缺点. 数组的优点: 操作数据,读取速度很快,因为有下标: 数组的缺点: 分配之后不能在改变大小: #in ...
- for循环语句之求和,阶乘,求偶,求n次篮球蹦起高度
for循环语句格式: ;;/*循环条件*/i++/*状态改变*/) { //循环体,执行代码:(break;跳出循环体) } for 穷举法用循环把各种可能的情况都走一遍,然后用if条件把满足要求的结 ...
- iOS MBProgressHUD 之带底板的加载提示
文章来自:http://blog.csdn.net/ryantang03/article/details/7877120 MBProgressHUD是一个开源项目,实现了很多种样式的提示框,使用上简单 ...
- Fragment实现不支持左右滑动的Tab
主要思想:顶部标题top.xml,中间Fragment,底部Tab导航. top.xml具体实现: <?xml version="1.0" encoding="ut ...
- c++,类的组合
1. 在A类中以B类的对象作为成员变量,称为类的组合(composition). 可以先看看这篇文章理解组合的用处: C++中组合的使用 http://blog.csdn.net/jia_xiaoxi ...
- C++标准库类型vector及迭代器iterator简介
Vector是C++标准库类型,称为容器,一个容器中的所有对象必须是同一种类型的.与数组相比,其最大的优点就是动态增长.Vector是一个类模板,并不是数据类型,而vector<int>和 ...
- Asp.Net中GridView加入鼠标滑过的高亮效果和单击行颜色改变
转载自:http://www.cnblogs.com/fly_dragon/archive/2010/09/03/1817252.html protected void GridView1_RowDa ...
- BZOJ 3477: [Usaco2014 Mar]Sabotage( 二分答案 )
先二分答案m, 然后对于原序列 A[i] = A[i] - m, 然后O(n)找最大连续子序列和, 那么此时序列由 L + mx + R组成. L + mx + R = sum - n * m, s ...
- WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[下篇]
原文:WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[下篇] 在[第2篇]中,我们深入剖析了单调(PerCall)模式下WCF对服务实例生命周期的控制,现在我们来 ...
- Java中StringBuilder的清空方法比較
StringBuilder 没有提供clear或empty方法. 清空有3种方法: 1)新生成一个,旧的由系统自己主动回收 2)使用delete 3)使用setLength 将三种方法循环1000万次 ...