现在的位置: 首页 > 综合 > 正文

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

2013年12月08日 ⁄ 综合 ⁄ 共 1433字 ⁄ 字号 评论关闭
/************************************************************************/
/* 亮度调整                                              */
/************************************************************************/

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

抱歉!评论已关闭.