Opencv 图像增强算法 图像检测结果

来源:互联网 发布:笔记本右下角网络红叉 编辑:程序博客网 时间:2024/05/01 02:09

本code通过直方图变换增强了图像对比度,实现了单通道图像增强。将图像灰度阈值拉伸到0-255,图像检测结果见底部

Keywords: 图像增强 增强对比度 直方图变换

int ImageStretchByHistogram(IplImage *src1,IplImage *dst1)/*************************************************Function:      通过直方图变换进行图像增强,将图像灰度的域值拉伸到0-255src1:               单通道灰度图像                  dst1:              同样大小的单通道灰度图像 *************************************************/{assert(src1->width==dst1->width);double p[256],p1[256],num[256];memset(p,0,sizeof(p));memset(p1,0,sizeof(p1));memset(num,0,sizeof(num));int height=src1->height;int width=src1->width;long wMulh = height * width;//statisticsfor(int x=0;x<src1->width;x++){for(int y=0;y<src1-> height;y++){uchar v=((uchar*)(src1->imageData + src1->widthStep*y))[x];num[v]++;}}//calculate probabilityfor(int i=0;i<256;i++){p[i]=num[i]/wMulh;}//p1[i]=sum(p[j]);j<=i;for(int i=0;i<256;i++){for(int k=0;k<=i;k++)p1[i]+=p[k];}// histogram transformationfor(int x=0;x<src1->width;x++){for(int y=0;y<src1-> height;y++){uchar v=((uchar*)(src1->imageData + src1->widthStep*y))[x];((uchar*)(dst1->imageData + dst1->widthStep*y))[x]= p1[v]*255+0.5;            }}return 0;}void CCVMFCView::OnImageAdjustContrast(){if(workImg->nChannels>1)OnColorToGray();Invalidate();dst=cvCreateImage(cvGetSize(workImg),workImg->depth,workImg->nChannels);ImageStretchByHistogram(workImg,dst);m_dibFlag=imageReplace(dst,&workImg);Invalidate();}

Experiment Result:

原图灰度化

                                    原图灰度化

检测结果1

                                     检测结果1

灰度化并增强对比度

                                灰度化并增强对比度

检测结果2

                                   检测结果2