Opencv 影象增強演算法 影象檢測結果
阿新 • • 發佈:2018-12-20
本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
灰度化並增強對比度
檢測結果2