1.1.3-学习Opencv与MFC混合编程之---画图工具 通过对话框进行工具的参数设置 画曲线 绘图校正

简介: 源代码:http://download.csdn.net/detail/nuptboyzhb/3961688 l 对话框 1.“插入”->“资源”->“对话框” 2.对话框属性如下: 双击对话框,建立对话框类。

源代码: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

目录
相关文章
|
4月前
|
计算机视觉 索引
OpenCv实时设置摄像头参数/获得摄像头参数值的方法论
这篇文章提供了一个OpenCV的实例教程,展示了如何使用`createTrackbar()`函数实时设置和获取摄像头参数值,如饱和度、Gamma和亮度,并通过回调函数在程序中连续修改这些参数。
|
4月前
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
|
4月前
|
存储 计算机视觉
OpenCV 中 CV_8UC1,CV_32FC3,CV_32S等参数的含义
OpenCV 中 CV_8UC1,CV_32FC3,CV_32S等参数的含义
339 3
|
4月前
|
前端开发 计算机视觉
Building wheel for opencv-python (pyproject.toml) ,安装命令增加 --verbose 参数
Building wheel for opencv-python (pyproject.toml) ,安装命令增加 --verbose 参数
248 2
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
OpenCV与AI深度学习之常用AI名词解释学习
AGI:Artificial General Intelligence (通用人工智能):是指具备与人类同等或超越人类的智能,能够表现出正常人类所具有的所有智能行为。又被称为强人工智能。
139 2
|
5月前
|
计算机视觉 Python
opencv 处理图像去噪的几种方法学习
OpenCV 提供了多种图像去噪的方法,以下是一些常见的去噪技术以及相应的 Python 代码示例: 均值滤波:使用像素邻域的灰度均值代替该像素的值。
76 0
|
6月前
|
机器学习/深度学习 开发框架 TensorFlow
### 如何系统化学习OpenCV4
### 如何系统化学习OpenCV4
46 0
|
2月前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
577 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
3月前
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
56 4
|
3月前
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制

热门文章

最新文章