/************************************************************************/ /* 亮度调整 */ /************************************************************************/ IplImage*transimg,*srcimg; int bright2adj; void re_adjust_bright(int) { assert(srcimg != NULL); assert(transimg != NULL); int x,y,i; if(srcimg->nChannels==3) { for (i = 0; i < 3; i++)//彩色图像需要处理3个通道,灰度图像这里可以删掉 for (y = 0; y < srcimg->height; y++) for (x = 0; x < srcimg->width; x++) { float val = ((uchar*)(srcimg->imageData + srcimg->widthStep*y))[x*3+i]; val+=bright2adj; if(val<0) val=0; else if(val>255) val=255; ((uchar*)(transimg->imageData + transimg->widthStep*y))[x*3+i] = (uchar)val; } } else { for (y = 0; y < srcimg->height; y++) for (x = 0; x < srcimg->width; x++) { float val = ((uchar*)(srcimg->imageData + srcimg->widthStep*y))[x]; val+=bright2adj; if(val<0) val=0; else if(val>255) val=255; ((uchar*)(transimg->imageData + transimg->widthStep*y))[x] = (uchar)val; } } cvShowImage("image",transimg); } void on_mouse3(int event,int x,int y,int flags,void* param) { if(event==CV_EVENT_LBUTTONUP) re_adjust_bright(0); } void CCVMFCView::OnAdjustBrightness() { srcimg=cvCloneImage(workImg); cvFlip(srcimg); transimg=cvCloneImage(srcimg); cvNamedWindow("image",CV_WINDOW_AUTOSIZE); cvCreateTrackbar("亮度", "image", &bright2adj, 255,re_adjust_bright); //re_adjust_bright(0); cvShowImage("image",srcimg); cvSetMouseCallback("image",on_mouse3,0); cvWaitKey(0); cvDestroyWindow("image"); cvReleaseImage(&srcimg); cvFlip(transimg); m_dibFlag=imageReplace(transimg,&workImg); m_ImageType=2; Invalidate(); }