opencv 利用滚动条调整图像亮度

/************************************************************************/
/* 亮度调整                                              */
/************************************************************************/

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();
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值