1. 程式人生 > >Opencv 影象增強演算法 影象檢測結果

Opencv 影象增強演算法 影象檢測結果

               

本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;  //statistics for(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 probability
 for(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 transformation for(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