灰度图像的膨胀操作(vc实现)
2012-08-22 21:53
120 查看
void CISLSView::dilationGray(int structure[3][3]) { //灰度图像的膨胀操作 //李立宗 lilizong@gmail.com //2012-8-22 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; } } //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; int src,des; for (int y=1; y<maxY-1; y++) { for (int x=1; x<maxX-1; x++) { src=des=0; for(m=0;m<3;m++) for(n=0;n<3;n++) { src=*(pRealData3+pit3*(y-m+1)+(x+n-1)*bitCount3)+structure[m] ; //src=abs(src); if(src>255) src=255; if(src>des) { des=src; } } //des=abs(des); //if(des>255) // des=255; *(pRealData2+pit2*(y)+(x)*bitCount2)=des; *(pRealData2+pit2*(y)+(x)*bitCount2+1)=des; *(pRealData2+pit2*(y)+(x)*bitCount2+2)=des; } } Invalidate(); }
相关文章推荐
- 在VC++中使用CxImage库读写图像实现像素操作
- 灰度图像--形态学处理:腐蚀、膨胀、开操作、闭操作、顶帽、底帽等
- 图像的分割和灰度处理(VC++实现)
- 灰度图像腐蚀(vc实现)
- 二值图像的膨胀操作(vc实现)
- VC编程实现灰度图像与彩色图像的相互转换
- 在VC++中使用CxImage库读写图像实现像素操作
- 利用数组操作实现灰度图像放大两倍(C++&opencv)
- vc++实现avi文件的操作
- 二值图像腐蚀与膨胀操作样例
- 灰度图像形状的识别分类算法实现matlab
- 图像形态学概要-腐蚀、膨胀、开运算、闭运算、形态学梯度(形态学边缘提取)、顶帽操作、黑帽操作
- Python图像灰度变换及图像数组操作
- 碎片图像无缝拼合技术的VC++实现
- 图像二值形态学——腐蚀和膨胀的C语言实现
- 图像配准实现代码VC6.0移植VC2010问题总结
- 碎片图像无缝拼合技术的VC++实现
- 基于VC与Matlab的混合编程实现图像的三维显示
- 深入浅出话VC++(3)——VC++实现绘图操作
- 图像滤波常见方法原理总结及VC下实现