为了处理上的方便,将彩色图像首先进行了灰度化、二值化处理。
void CISLSView::OnErosionBin()
{
//程序编制:李立宗 lilizong@gmail.com
//2012-8-17
//图像腐蚀,二值图像腐蚀。
//int structure[3][3]={0,1,0,1,1,1,0,1,0};
int structure[3][3]={1,1,1,1,1,1,1,1,1};
erosionBin(structure);
}
void CISLSView::erosionBin(int structure[3][3])
{
if(myImage1.IsNull())
OnOpenResourceFile();
if(!myImage2.IsNull())
myImage2.Destroy();
if(myImage2.IsNull()){
myImage2.Create(myImage1.GetWidth(),myImage1.GetHeight(),24,0);
}
if(myImage3.IsNull()){
myImage3.Create(myImage1.GetWidth(),myImage1.GetHeight(),24,0);
}
//COLORREF pixel;
int maxY = myImage1.GetHeight();
int maxX=myImage1.GetWidth();
byte* pRealData;
byte* pRealData2;
byte* pRealData3;
pRealData=(byte*)myImage1.GetBits();
pRealData2=(byte*)myImage2.GetBits();
pRealData3=(byte*)myImage3.GetBits();
int pit=myImage1.GetPitch();
int pit2=myImage2.GetPitch();
int pit3=myImage3.GetPitch();
//需要注意,pit和pit2的值并不一样,所以如果使用一个值,会导致不同的结果出现
//CString str;
//str.Format(TEXT("%d"),pit);
//MessageBox(str);
//str.Format(TEXT("%d"),pit2);
//MessageBox(str);
int bitCount=myImage1.GetBPP()/8;
int bitCount2=myImage2.GetBPP()/8;
int bitCount3=myImage3.GetBPP()/8;
int tempR,tempG,tempB;
//float temp,tempX,tempY;
int temp;
float u0,u1; //均值
float w0,w1; //概率
float sum0,sum1; //像素和
int optIndex,optT; //最优阈值,及其所在像素的值
float fVaria,fMaxVaria=0; //临时方差,最大方差
//int pixelR[256],pixelG[256],pixelB[256];
int pixel[256]={0}; //不要忘记初始化
//灰度化
for (int y=0; y<maxY; y++) {
for (int x=0; x<maxX; x++) {
temp=*(pRealData+pit*(y)+(x)*bitCount);
if(bitCount==3)
{
tempR=*(pRealData+pit*(y)+(x)*bitCount);
tempG=*(pRealData+pit*(y)+(x)*bitCount+1);
tempB=*(pRealData+pit*(y)+(x)*bitCount+2);
temp=(int)(tempR*0.49+tempG*0.31+tempB*0.2);
//temp=(int)((tempR+tempG+tempB)/3);
}
*(pRealData3+pit3*(y)+(x)*bitCount3)=temp;
*(pRealData3+pit3*(y)+(x)*bitCount3+1)=temp;
*(pRealData3+pit3*(y)+(x)*bitCount3+2)=temp;
}
}
//二值化
for (int y=0; y<maxY; y++) {
for (int x=0; x<maxX; x++) {
temp=*(pRealData3+pit3*(y)+(x)*bitCount3);
if(temp>128)
temp=255;
else
temp=0;
*(pRealData3+pit3*(y)+(x)*bitCount3)=temp;
*(pRealData3+pit3*(y)+(x)*bitCount3+1)=temp;
*(pRealData3+pit3*(y)+(x)*bitCount3+2)=temp;
}
}
//CString str;
//str.Format(TEXT("%d"),Td);
//AfxMessageBox(str);
//
for (int y=0; y<maxY; y++) {
for (int x=0; x<maxX; x++) {
*(pRealData2+pit2*(y)+(x)*bitCount2)=255;
*(pRealData2+pit2*(y)+(x)*bitCount2+1)=255;
*(pRealData2+pit2*(y)+(x)*bitCount2+2)=255;
}
}
int m,n;
for (int y=1; y<maxY-1; y++) {
for (int x=1; x<maxX-1; x++) {
temp=*(pRealData3+pit3*(y)+(x)*bitCount3);
for(m=0;m<3;m++)
for(n=0;n<3;n++)
{ if(structure[m][n]==0)
continue;
temp=*(pRealData3+pit3*(y-m+1)+(x+n-1)*bitCount3);
if(temp==0)
{
*(pRealData2+pit2*(y)+(x)*bitCount2)=0;
*(pRealData2+pit2*(y)+(x)*bitCount2+1)=0;
*(pRealData2+pit2*(y)+(x)*bitCount2+2)=0;
break;
}
}
}
}
Invalidate();
}
分享到:
相关推荐
opencv编程中的图像处理代码 图像腐蚀与膨胀 平台opencv2.4.9
vc 图像处理形态学-腐蚀与膨胀源码,做车牌识别时候或许有用上,原来那个只能处理256色的软件可以连续腐蚀和膨胀,因为它的clearmem的原因,新的软件不具备这个功能,为了让不同的功能更加看得清楚,如果想加上连续...
vc++ 彩色图像灰度化,中值、二值化、腐蚀、求坐标程序
在VC下对遥感图像进行处理,内容实现比较丰富,包括:灰度与彩色图像的线性拉伸,直方图均衡,旋转缩放平移,RGB->HIS,HIS->RGB,彩色图像灰度化 ,W伪彩色增强,腐蚀,膨胀,开闭运算,五种植被指数,变化检测(比值...
二值图像的处理:腐蚀、膨胀、细化、距离变换等; 9. 图像分析:直线、圆、特定物体的识别; 10.JEPG、GIF、PCX等格式文件相关操作; 11.图像文件格式的转换; 12.图像的常用变换:付利叶变换...
C++实现灰度图像的腐蚀、膨胀、细化运算(bmp灰度图片),vc6.0运行无误
基于C程序的图像腐蚀,图像膨胀,细化算法代码,较简陋那种,甚至还有些不完善,仅供参考吧。
VC 图像平滑、边缘检测、边缘增强、锐化、腐蚀、开运算等~
二值图像的处理:腐蚀、膨胀、细化、距离变换等; 9. 图像分析:直线、圆、特定物体的识别; 10.JEPG、GIF、PCX等格式文件相关操作; 11.图像文件格式的转换; 12.图像的常用变换:付利叶变换...
实验室找到的程序,关于图像处理的,有需要的下
二值图像的处理:腐蚀、膨胀、细化、距离变换等; 9. 图像分析:直线、圆、特定物体的识别; 10.JEPG、GIF、PCX等格式文件相关操作; 11.图像文件格式的转换; 12.图像的常用变换:付利叶变换、DCT变换、沃尔什...
唯一改进的地方是,原代码功能只能处理0和255的二值灰度(搞不懂为什么这样,对于250、128这样的都不行,还不如弄成二值灰度,别弄256灰度了),我将之改成了能根据0~255中任意灰度划界的256灰度图像! 更多内容...
vc图像处理 图像抖动 图像腐蚀 图像镜像图像扩展 图像目标获取
对图像进行时域,频域,空间域等处理,如:平移,旋转, 直方图,滤波,平滑,膨胀,腐蚀等等,应该还算比较全
该程序由VC编写,实现功能有图像的边缘检测,绘制直方图,Hough的实现,图像的旋转以及图像的腐蚀膨胀等。具有很好的界面实现功能。
主要可以实现图像的打开、保存、另存为、图像分割(边缘检测、阈值分割等) 几何变换(放大缩小旋转等)直方图、形态学运算(腐蚀膨胀)图像增强(平滑锐化)噪声演示(高斯噪声椒盐噪声)【另外,初学,还有一点...
《精通Visual C++ 数字图像处理典型算法及实现》 第2版 (张宏林) ...第7章 数字图像腐蚀、膨胀和细化算法 第8章 图像边缘检测、提取及轮廓跟踪 第9章 图像分割 第10章 图像配准 第11章 图像复原 第12章 图像压缩编码
VC6下数字图像处理系统-DIP_system,包含以下功能函数: ============================================================================== 第3章 ==============================================================...
C语言处理图片腐蚀、膨胀的细化算法实例,用C处理图像的例子。调试时请注意:运行测试文件时,需要测试调用的文件c:\test.bmp必须存在。注意释放内存和位图,调色板句柄,还要注意重新分配内存和调色板,位图句柄时...
全书共12章,分别介绍了数字图像编程基础、图像感知与获取、图像的点运算、几何变换、正交变换、图像增强、腐蚀算法、膨胀算法、细化算法、边缘检测与提取、轮廓跟踪、图像分割、图像配准、图像复原和图像的压缩编码...