您的位置:首页 > 其它

从零开始学习MFC与数字图像处理(-)

2013-06-10 14:13 537 查看
首先,作者简介:本小白从事视频监控行业,主要作为一名调试工程师,涉及,ISP debug,sensor debug,embed linux driver debug ,在工作工程中对图像处理有浓厚的兴趣,本人对sensor有一定的认识,对底层的图像ISP调试也有一些认识,这两点就是我的工作内容,想要更加深刻的认识必须要略知其中的一些算法,想要略知算法,在学习很认识的工程当中就不能拿出略知的心态来对待,所以有了这么一出“从零开始学习MFC与数字图像处理”,本小白,C语言的级别是“可以使用”,MFC没有正式的接触过,数字图像处理与作者的大学专业相去甚远,没有任何一个师傅指点过,如有不对之处,请大家不吝指点,如有大家看着实在太小白之处,请不吝指点。OK
,背景工作交代完成,带着我要达到的目的与兴趣,go!

图像处理的基本内容之一图像增强,作者在接触视频监控时,其经常遇见整幅图像对比度不够、噪声过大、边缘发虚的情况,这些内容我们统称为图像的增强,

我们首先完成其中的对比度选项,高对比度的图像可提高整幅画面的通透性,但是易损失暗处细节,至于如何达到想要的效果,需要权衡。对比度的提升,有两种方式:

(特殊说明之前,小白均指的是 8bit位图)

1.运用直方图 2. 灰度映射

直方图是统计整幅图像的灰度信息,如果你安装了photoshop,在图像信息的那一个窗口,就有直方图这一项。直方图的分布,代表了整幅图像的大体灰度走势,比如如果中间直方图较大,那么整幅图像整体发灰,没有太白 或者太黑的地方,如果两端信息大,则说明这幅图像有对比很明显的地方。直方图均衡化,就是通过一种方式,让图像的灰度信息整个拉开,不要只分布在那几点上。

第一篇,建立一个MFC单文档工程,完成直方图均衡化

1.MFC 建立单文档工程,new -> mfc exe -> 工程名起好,在这里我起名“drvimg”(driveimage),选择单文档,完成。

2.添加图像增强 菜单项,完成3个非模态对话框的显示,绘制直方图信息。

3.直方图均衡化过程:

int showtoav(char * ptr,int width, int height)
{
int i,j;
int av[256]={0};
char  newav[256]={0};
unsigned char * tmp;
int savewidth = WIDTHBYTES(width * 8);
for(i=0;i<width;i++)	//直方图统计
{

for (j=0;j<height;j++)
{
tmp = (unsigned char *)ptr +	i*savewidth +j;
av[*tmp]++;
}

}

for (i=0;i<256;i++)	//通过概率密度函数,新的灰度值计算
{
int count=0;
for (j=0;j<=i;j++)
{
count += av[j];
}
newav[i] = BYTE(count * 255 /width /height);
}

for(i=0;i<width;i++)	//修改图像的值
{
for (j=0;j<height;j++)
{
tmp = (unsigned char*)(ptr +	i*savewidth +j);
*tmp = newav[*tmp];
}
}

return 0;
}

完成后的结果如这样:

靠,我竟然不会插入图片。



靠,我竟然不会插入源码,算了 网盘同步更新源码及测试图片:

http://www.kuaipan.cn/file/id_50878569135477678.htm

访问密码:IwmDxs

先打开测试图片 ,如test.bmp ,然后点图像增强

PS : 第一次写博客,想写好博客也不是一件简单的事
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: