OpenCV学习笔记(三):将图像显示在MFC控件上并做直方图均衡化处理
来源:互联网 发布:大连pm2.5历年数据 编辑:程序博客网 时间:2024/05/19 21:42
本博将讲述利用OpenCV将图片显示在VS的控件上,并给出将图像进行直方图均衡化的方法:
首先,建立一个基于对话框的工程,删除上面已有三个控件,然后在上满拉出一个Button和Picture Control,分别用于打开和显示图片:
然后在工程对话框类中添加一个成员变量,用于存储打开的图片:
//共有成员变量,用以保存打开的图片
IplImage* firstImage;
接着在对话框添加成员函数 showImagetoWnd(IplImage* img, UINT ID) 用以将图片显示到Picture Control上,函数源代码如下
void CshowImgVideoDlg::showImagetoWnd(IplImage* img, UINT ID)
{
CDC *pDC=GetDlgItem(ID)->GetDC();
HDC hDC=pDC->GetSafeHdc();
CRect rect;
GetDlgItem(ID)->GetClientRect(&rect);//得到控件区域大小rect
int rectw=rect.right-rect.left;//控件宽度
int recth=rect.bottom-rect.top;//控件高度
IplImage *outImg=cvCreateImage(cvSize(rectw,recth),img->depth,img->nChannels);//重建一张与控件大小一样大的图片
cvResize(img,outImg,CV_INTER_CUBIC);//将原始图片缩放到控件大小
CvvImage outimage;
outimage.CopyOf(outImg);
outimage.DrawToHDC(hDC,&rect);//将图片拷贝到控件上
ReleaseDC(pDC);
}
最后,在Button控件上添加响应函数,打开图像。
void CshowImgVideoDlg::OnBnClickedopenimage()
{
// TODO: 在此添加控件通知处理程序代码
CFileDialog dlg(TRUE,//TRUE表示显示打开对话框 FALSE表示显示表寸对话框
"jpg Files (*jpg)",//指定默认的文件扩展名
NULL, //指定默认文件名
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT |OFN_ALLOWMULTISELECT|OFN_ENABLESIZING,//指定一些风格
_T("image Files (*.TIFF;*.BMP;*.JPG)|*.TIFF;*.BMP;*.JPG;)|All Files(*.*)|*.*||"),//指定过滤器 注意书写
NULL); //指定父窗口
if (IDOK != dlg.DoModal())
{
return;
}
CString strpath=dlg.GetPathName();
IplImage *pImage=cvLoadImage(strpath,CV_LOAD_IMAGE_ANYCOLOR);
if (!pImage)
{
return;
}
if (firstImage)
{
cvZero(firstImage);//图像数据清0
}
firstImage=pImage; //一定要缩放 以为图片大小不统一
showImagetoWnd(firstImage,IDC_showImg);//调用showImagetoWnd()将图片显示在控件上
// cvReleaseImage(&pImage);
}
接下来给出一个将图像进行直方图均衡化处理的函数:
IplImage* CshowImgVideoDlg::EqualizeHistColorImage(IplImage* pImage)
{
IplImage *pEqualImage = cvCreateImage(cvGetSize(pImage),pImage->depth,pImage->nChannels);
const int MAX_CHANNEL=4;
IplImage *pImageChannel[MAX_CHANNEL]={NULL};
int i;
for (i=0;i<pImage->nChannels;++i)
{
pImageChannel[i]=cvCreateImage(cvGetSize(pImage),pImage->depth,1);
}
cvSplit(pImage,pImageChannel[0],pImageChannel[1],pImageChannel[2],pImageChannel[3]);
for (i=0;i<pImage->nChannels;++i)
{
cvEqualizeHist(pImageChannel[i],pImageChannel[i]);
}
cvMerge(pImageChannel[0],pImageChannel[1],pImageChannel[2],pImageChannel[3],pEqualImage);
for(i=0;i<pImage->nChannels;++i)
{
cvReleaseImage(&pImageChannel[i]);
}
return pEqualImage;
}
这样,灵活应用这个函数就可以对图像进行直方图均衡化处理,上面显示的图片的处理结果如下:
本节完,谢谢观众。
- OpenCV学习笔记(三):将图像显示在MFC控件上并做直方图均衡化处理
- Opencv学习笔记三-直方图点运算(直方图基本点算子、直方图正规化、直方图均衡化)
- 图像处理(三):直方图均衡化
- opencv学习笔记9 直方图均衡化并绘制直方图
- OpenCV 2 学习笔记(17): 均衡化图像直方图
- 图像处理算法基础(三)---直方图均衡化,自研与opencv对比
- WinCE6.0学习笔记(图像读取并显示在MFC控件中)
- 图像处理学习笔记之直方图均衡化
- 在MFC图像控件上显示opencv Mat格式图片
- OpenCV学习笔记(2)之图像通道分离和RGB三通道直方图显示
- 图像处理opencv直方图均值化-学习笔记2
- 【图像处理笔记】直方图均衡
- 【图像处理笔记】直方图均衡
- OpenCV学习(十六)之直方图均衡化并画出直方图
- 【OpenCV笔记 14】OpenCV图像增强方法直方图均衡化
- opencv学习笔记-直方图和均衡化
- opencv直方图均衡化图像
- opencv 2.x学习笔记(十二)直方图均衡化
- 如何对修改后的java源代码进行重新打包
- log4cplus:一个按天为单位、按不同类型归类的配置文件
- 如何修改(更换)SVN账户
- c++模板类
- 树(图)的建立、初始化和遍历
- OpenCV学习笔记(三):将图像显示在MFC控件上并做直方图均衡化处理
- 为什么0.1无法被二进制小数精确表示?
- flex渲韵效果
- Linux常用指令 2 vi编辑器的常用命令
- MFC 小知识总结一
- IOS编程教程(十三):如何往表视图(Table View)添加搜索栏(Search Bar)
- SIM Card-基础 (11.11)
- jQuery Positioning data is until the last line
- 第三季度财报有游戏高管电话解读