MFC 画坐标系以及画灰度图像的直方图
来源:互联网 发布:旅游产品网络推广方法 编辑:程序博客网 时间:2024/06/05 22:48
1.创建一个对话框类CHistogramdlg,并在类定义一个指向int指针(Imagedata),
用于传入统计好的灰度分布数据,一般存储在256的数组中。
2.重载对话框类的OnPaint,并添加代码如下:
void CHistogramdlg::OnPaint(){CPaintDC dc(this); CPen* pPenBlue = new CPen; //创建画笔对象pPenBlue->CreatePen(PS_SOLID, 2, RGB(0,0,255)); //蓝色画笔CPen* pPenBlack = new CPen; //创建画笔对象pPenBlack->CreatePen(PS_SOLID, 1, RGB(0,0,0)); //黑色画笔CGdiObject* pOldPen = dc.SelectObject(pPenBlack); //选中黑色画笔,并保存当前画笔 int i = 0;CString str;//绘制坐标系CPoint OPos(40,500),NowPos;//绘制x坐标轴dc.MoveTo(OPos); NowPos.x = 565;NowPos.y = 500;dc.LineTo(NowPos);//绘制箭头dc.LineTo(560,495);dc.MoveTo(NowPos);dc.LineTo(560,505);//绘制x轴坐标系数for (i = 0;i != 257;i++){if (i % 10 == 0){dc.MoveTo(OPos.x + 2 * i,OPos.y);dc.LineTo(CPoint(OPos.x + 2 * i,OPos.y - 5));}if (i % 20 == 0){str.Format("%d",i);dc.TextOut(OPos.x + 2 * i,OPos.y + 1,str);}}//绘制y轴坐标系数dc.MoveTo(OPos);NowPos.x = OPos.x;NowPos.y = 0;dc.LineTo(NowPos);//绘制箭头dc.LineTo(NowPos.x - 5,NowPos.y + 5);dc.MoveTo(NowPos);dc.LineTo(NowPos.x + 5,NowPos.y + 5);//寻找数据数组最大的数据int max = 0;for (i = 0;i != 256;i++){if (max < ImagData[i]){max = ImagData[i];}}//y轴坐标系数的数据步长int Tstep = max / 10;//y轴坐标系数的刻度步长int Ystep = 500 / 21;//显示y坐标的刻度和数据for (i = 1;i != 22;i++){dc.MoveTo(OPos.x,OPos.y - Ystep * i );dc.LineTo(CPoint(OPos.x + 5,OPos.y - Ystep * i));if (i % 2 == 0){str.Format("%d",Tstep * i / 2);dc.TextOut(0,OPos.y - Ystep * i - 10,str);}}//绘制灰度图像的直方图dc.SelectObject(pPenBlue); //选择蓝色画笔for (i = 0;i != 256;i++){NowPos.x = OPos.x + (2 * i);NowPos.y = OPos.y;dc.MoveTo(NowPos);NowPos.y = 500 - 500.0f * 20.0f * ImagData[i] / (max * 21);dc.LineTo(NowPos);}//恢复以前的画笔dc.SelectObject(pOldPen);delete pPenBlue;delete pPenBlack;}
3 把CHistogramdlg.h头文件加入单文档doc的头文件中
4在单文档中菜单中添加直方图菜单,并添加消息函数,具体代码如下:
//判断图像是否为灰度图像if (GrayImage == NULL){MessageBox(NULL,"请先把图像转换为灰度图像","操作提示",MB_OK);return ;}int step = GrayImage->widthStep / sizeof(uchar);uchar *data = (uchar *)GrayImage->imageData;int HistData[256],i = 0,j = 0;for (j = 0;j != 256;j++){HistData[j] = 0;}for (i = 0;i != GrayImage->height;i++){for (j = 0;j != GrayImage->width;j++){HistData[data[i * step + j]]++;}}CHistogramdlg dlg;dlg.ImagData = HistData;if (dlg.DoModal() != IDOK){return;}delete dlg;
5运行结果:
- MFC 画坐标系以及画灰度图像的直方图
- MFC 画坐标系以及画灰度图像的直方图
- MFC 画坐标系以及画灰度图像的直方图
- 灰度图像的直方图
- 灰度图像的直方图
- 图像的灰度直方图
- 图像的灰度直方图
- opencv实现灰度图像的直方图点计算以及灰度直方图显示
- 图像处理opencv2-灰度直方图以及灰度直方图均衡化
- Matlab图像的灰度直方图
- 图像的灰度直方图介绍
- matlab求灰度图像的灰度直方图
- java实现图像的直方图均衡以及灰度线性变化,灰度拉伸
- MATLAB中绘制灰度图像的直方图
- 图像的灰度化,直方图均衡化
- 用opencv创建图像的灰度直方图
- 计算灰度图像的归一化直方图
- Opencv中图像的灰度直方图
- 数据结构 学习笔记之:线性表——顺序表、静态链表、动态链表(单链表、双链表、单循环链表、双循环链表,链式栈、链式队列)——基础概念大扫盲!
- Android 数据库存储 SQLite
- AC
- 如何在GooglePlay上下载收费应用(APP)
- MXML文件几个方法的执行顺序
- MFC 画坐标系以及画灰度图像的直方图
- 自然而流畅——聊聊界面的切换动画
- 用带参数的存储过程实现新闻的搜索功能
- OpenCV学习笔记(二)——新版本模块结构
- 无线网络通信技术完全介绍
- mysql UNION UNION All
- ubuntu下用virtual box安装win xp的一些问题(转载的,当学习了)
- 运用数据库查询语句并且返回查询出来返回的查询条数
- 黑马程序员——Java多线程入门