大型资讯门户网站怎么做排名,济南网站建设 济南货梯,网络营销师怎么报名,广州培训网站建设由于这个库主要用于VC MFC下开发应用#xff0c;因此目前可以下载到版本只支持MFC开发。如果您需要标准Win32的库#xff0c;可以在回复时留下您的邮箱#xff0c;或跟我联系。Email#xff1a;wuchunlei163.comQQ#xff1a;819543772EasyAnalysis图像分析库测试版以及源…由于这个库主要用于VC MFC下开发应用因此目前可以下载到版本只支持MFC开发。如果您需要标准Win32的库可以在回复时留下您的邮箱或跟我联系。 Emailwuchunlei163.com QQ819543772 EasyAnalysis图像分析库测试版以及源代码下载地址 下载地址 http://www.5941ts.com/EasyAnalysis/EasyAnalysis.rar 共190KB 本小节所涉及的源程序 http://www.5941ts.com/EasyAnalysis/demo/5/TestDll.rar 上面一个小节介绍了CBmp和CImage中的基本功能经过阅读和时间想必大家已经对类的结构和应用有了大致的了解这一小节主要介绍CBmp和CImage类中几个比较实用的图像处理功能。 一图像相减 桢差法是对运动物体定位的一种常用方法通常使用连续捕获到的两到三张图象通过像素相减求得图像间的差异为后续识别和定位打下基础。图像相减在CBmp类中重载运算符“-”完成由于任何一种图像格式在做减法时都只有像素参与了运算因此为了程序有良好的复用结构具体像素之间的减法在CImage中实现。 1 相同尺寸图像相减 函数声明CBmp operator-(CBmp m_Bmp) throw(); 返回值CBmp 函数功能重载运算符实现Bmp图像相减 应用举例 try { CBmp m_BmpBk; //背景图片 CBmp m_BmpFk; //前景图片 CBmp m_Bmp; //保存结果 m_BmpBk.CreateImage(背景.bmp); //通过文件初始化CBmp对象 m_BmpFk.CreateImage(人物.bmp); m_Bmpm_BmpFk-m_BmpBk; //背景相减 m_Bmp.SaveData(test1.bmp); } catch(CPException err) { int nErrCodeerr.GetErrCode(); //取错误类型代码 MessageBox(err.GetErrMsg()); //弹出错误信息 } 处理结果见下图上左背景图片 上右人物和背景 下左相减后的结果 注为了最大化的保留图像相减后的信息相减后取结果的绝对值。 2 不同尺寸的图像相减 细心的朋友可能已经发现了上述图像相减是在尺寸、颜色位数完全相同的情况下而做的。在图像尺寸不同的时如果直接应用上述方法程序会抛出一个异常代码为ERR_NOT_EQUAL_SIZE的CPException的异常。在图像尺寸不同的时候我们需要先使用CBmp的AdjustImageToEqualSize()函数将两幅图像的尺寸、颜色位数调整为相同大小然后在通过上述方法即可实现不同尺寸的图像相减的功能。 函数原型static void AdjustImageToEqualSize(CBmp m_BmpA,CBmp m_BmpB) 返回值静态函数m_BmpA,m_BmpB即用于输入原始图像又用于返回校调整好的图像 函数功能将图像尺寸、颜色位数调整为相同的大小。调整原则 I 取两幅图像中biHeight属性大的值作为新图像的biHeight II 取两幅图像中biWidth属性大的值作为新图像的biWidth III 取两幅图像中biBitCount属性大的值作为新图像的biBitCount IV 新图像中像素矩阵坐标属于原图像的直接丛原图像中复制到新图像中否则新图像中该位置像素补0 应用举例 try { CBmp m_BmpA; CBmp m_BmpB; CBmp m_Bmp; //保存结果 m_BmpA.CreateImage(汉字.bmp); //通过文件初始化CBmp对象 m_BmpB.CreateImage(人物.bmp); CBmp::AdjustImageToEqualSize(m_BmpA,m_BmpB); //调整两幅图像尺寸 m_Bmpm_BmpA-m_BmpB; //背景相减 m_Bmp.SaveData(test2.bmp); } catch(CPException err) { int nErrCodeerr.GetErrCode(); //取错误类型代码 MessageBox(err.GetErrMsg()); //弹出错误信息 } 程序运行效果如下上原始图片下相减后的图片 从运行结果可以看出左上图由于小于左上图尺寸的位置补了零因此上下两幅图像相减后大于左上图尺寸的像素位置没有变化而两幅图像重叠的部分做了减法。 二图像相加 图像相加也是图像分析技术中常用的操作之一下面介绍EasyAnalysis库中提供的图像加法操作。 1 相同尺寸的图像相加 函数声明CBmp operatorCBmp m_Bmp) throw(); 返回值CBmp 函数功能重载运算符实现Bmp图像相加 应用举例 //相同尺寸的图像加法 try { CBmp m_BmpA; CBmp m_BmpB; CBmp m_Bmp; //保存结果 m_BmpA.CreateImage(人物.bmp); //通过文件初始化CBmp对象 m_BmpB.CreateImage(人物1.bmp); //CBmp::AdjustImageToEqualSize(m_BmpA,m_BmpB); //调整两幅图像尺寸 m_Bmpm_BmpAm_BmpB; //图像相加 m_Bmp.SaveData(test3.bmp); } catch(CPException err) { int nErrCodeerr.GetErrCode(); //取错误类型代码 MessageBox(err.GetErrMsg()); //弹出错误信息 } 运行结果如下(上原始图像下相加后的结果) 可以看出通过上述操作将两幅图像逐个像素平权的相加是不是有点蒙太奇的效果:) 注平权相加指两幅图像矩阵乘以一个相同的常数后再相加为了不增加输出图像的总强度因此重载运算符“”实际上是实现将两幅图像同时乘以0.5然后再相加。 2 不同尺寸的图像相加 图像减法中不同尺寸相减可能用得较少但是图像加法中不同尺寸图像加法用得相对来说就比较多了最常见的就是为图像增加数字水印。与图像减法相同如果图像尺寸不同那么同样只需要使用AdjustImageToEqualSize()先将图像尺寸调整一致然后再行相加即可。下面给出了不同尺寸图像加法的源代码 //不同尺寸的图像加法 try { CBmp m_BmpA; CBmp m_BmpB; CBmp m_Bmp; //保存结果 m_BmpA.CreateImage(人物.bmp); //通过文件初始化CBmp对象 m_BmpB.CreateImage(汉字.bmp); CBmp::AdjustImageToEqualSize(m_BmpA,m_BmpB); //调整两幅图像尺寸 m_Bmpm_BmpAm_BmpB; //图像相加 m_Bmp.SaveData(test4.bmp); } catch(CPException err) { int nErrCodeerr.GetErrCode(); //取错误类型代码 MessageBox(err.GetErrMsg()); //弹出错误信息 } 程序运行结果如下 3 图像的带权相加 上面操作虽然将汉字和人物图片重叠在同一幅图片之上但是由于重载操作符“”是以0.5为系数的平权相加因此图像中汉字以外的区域由于补了0的缘故被削弱了一倍显然我们是不需要削弱这些部分的为了解决这个问题EasyAnalysis库提供了一个更加灵活的函数AddImageByWeight。 函数声明static CBmp AddImageByWeight(CBmp m_BmpA,CBmp m_BmpB,float fWA,float fWB) 返回值CBmp 函数功能静态函数实现如下形式的图像相加 NewBmpfWA*[m_BmpA]fWB*[m_BmpB]; 应用举例 try { CBmp m_BmpA; CBmp m_BmpB; CBmp m_Bmp; //保存结果 m_BmpA.CreateImage(人物.bmp); //通过文件初始化CBmp对象 m_BmpB.CreateImage(汉字.bmp); CBmp::AdjustImageToEqualSize(m_BmpA,m_BmpB); //调整两幅图像尺寸 m_BmpCBmp::AddImageByWeight(m_BmpA,m_BmpB,1,0.3); //图像相加 m_Bmp.SaveData(test5.bmp); } catch(CPException err) { int nErrCodeerr.GetErrCode(); //取错误类型代码 MessageBox(err.GetErrMsg()); //弹出错误信息 } 从上图可以看出通过调整权值输出的图像有了明显的改善。虽然图像比上面直接相减的效果好些但是汉字部分始终有讨厌的白色底色。在对EasyAnalysis库的所有功能介绍完毕以后我会在后面的高级应用篇中介绍如何将汉字完美的添加到人物图像中去。转载于:https://www.cnblogs.com/wude/archive/2007/10/25/1941634.html