OpenCV単純輝度補正機能実現
1532 ワード
今日は簡単な明るさ補正機能の方法を見つけました.感覚効果はまあまあです.簡単な背景に使用します.コードは以下の通りです.
int _tmain(int argc, _TCHAR* argv[])
{
IplImage* src;
// 。
char* filename = (char*)"C:\\Users\\chenchao\\Desktop\\ \\25.bmp";
if( (src = cvLoadImage( filename, 0)) == 0 )
return -1;
cvNamedWindow( "src", 1 );
cvShowImage( "src", src );
IplImage* mean=cvCreateImage(cvGetSize(src), 8, 1 );
IplImage* dst=cvCreateImage(cvGetSize(src), 8, 1 );
cvSmooth( src, mean, CV_MEDIAN , 101, 101, 0, 0 );
cvNamedWindow( "mean", 1 );
cvShowImage( "mean", mean );
int i,j;
int k;
double val,val_mean,val_dst;
float factor=0.7;
int step_src=src->widthStep/sizeof(uchar);
int step_mean=mean->widthStep/sizeof(uchar);
for(j=0;j<src->height;j++)
{
for(i=0;i<src->width;i++)
{
k=j*step_src+i;
val=((uchar*)(src->imageData))[k]; //
val_mean=((uchar*)(mean->imageData))[k];//
val_dst=(int)( (127-val_mean)*factor + val ); //
//
if(val_dst<0)
val_dst=0;
//
((uchar*)(dst->imageData))[k]=(int)val_dst;
}
}
cvNamedWindow( "dst", 1 );
cvShowImage( "dst", dst );
cvWaitKey(0);
cvSaveImage("C:\\Users\\chenchao\\Desktop\\1.bmp",dst);
cvReleaseImage(&src);
cvReleaseImage(&mean);
cvReleaseImage(&dst);
cvDestroyWindow("src");
cvDestroyWindow("mean");
cvDestroyWindow("dst");
return 0;
}