/************************************************************************/
/* 亮度调整 */
/************************************************************************/
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();
}
opencv 利用滚动条调整图像亮度
最新推荐文章于 2022-01-20 17:26:08 发布