- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
再来下面是用伪码的方式表达亮度
再来下面是用伪码的方式表达亮度 /对比的算法
OpenCV统计应用-影像增强,亮度/对比实作
在一般显示屏幕以及图形处理的应用软件上 ,都会有一个亮度/对比的色彩(Brightness/Contrast) 调整,它
是属于影像增强的部份,在OpenCV里面的Sample Code里面就有这样的灰阶程序的实作,在这边就修改了
OpenCV的 Sample Code,来做色彩增强的亮度/对比的程序,而在一般的亮度/对比来讲亮度(Brightness)的 范围为0?200而对比(Contrast)亦是0?200,它们由一条线性函数的公式所定义 ,对比所代表的是斜率,亮度 则是偏移量,这条线性公式代表的是 Look-up table 的对应,它的数学式定义如下
原始的亮度对比数值范围为-100
原始的亮度对比数值范围为
-100?100之间,C代表对比,B代表亮度
-100 0^100
-100 5 100
对于对比率(Contrast ratio) 来讲,delta 范围应该落在0?255,这边将对比率的公式做重新的调整
if C0
c
Al = 127*
100
c o A, ^127
w读 C 0
A —122*
a 100 0 123
对比率代表着斜率的a值,而亮度则是决定线性公式位移的情况 ,也就是B值,而Y=a X+B这个线性公式它
所表达的情况如下
而它的情况如下
=0.1. 25
a值的范围落在 0?255之间,
1 a255
1 a255
0 1
y 二述+0
f if co
she C 0
C = C-1QO;
B ■ B ? 100c
iRC 0)
fbrj =0t1,2 255
y2 =殂 +0.
else if(C 玉 0)
i = |2S*—b
100
256-2 a= —_
255
0 =州 +A;
f6r_i =0,1,2 255
川的3
下面就是亮度/对比的程序了
亮度/对比实作
#include cv.h
#include highgui.h
TOC \o 1-5 \h \z #include stdio.h int Brightnessposition = 100;
int ContrastPosition = 100;
int HistogramBins = 64;
int HistogramBinWidth;
float HistogramRange1[ 2]={ 0,256};
float *HistogramRange[ 1 ]={ HistogramRange1[ 0]};
IplImage *Image1,*Image2;
CvHistogram *Histogram1;
IplImage *HistogramImage;
uchar LookupTableData[ 256];
CvMat *LookupTableMatrix;
IplImage *LookupTablelmage;
CvPoint Point1,Point2;
void OnTrackbar( int Position)
{
int Brightness=BrightnessPosition- 100;
int Contrast=ContrastPosition - 100; double Delta;
double a,b;
int y;
if (Contrast 0)
if (Contrast 0)
{
Delta= 127*Contrast/ 100; a=255/( 255-Delta* 2); b=a*(Brightness-Delta);
for (int x= 0;x 256;x++) {
y=( int )(a*x+b);
if (y 0)
y=0;
if (y 255)
y=255;
LookupTableData[x]=(uchar)y;
}
}
else {
Delta=- 128*Contrast/ 100; a=( 256-Delta* 2)/ 255; b=a*Brightness+Delta;
for (int x= 0;x 256;x++)
{
y=( int )(a*x+b);
if (y 0)
y=0;
if (y 255) y=255;
LookupTableData[x]=(uchar)y;
}
}
//End //Look up table sketch cvSetZero(LookupTableImage); cvNot(LookupTableImage,LookupTableImage);
Point2=cvPoint( 0,LookupTableData[ 0]);
for (int i= 0;i 256;i++)
{
Point
文档评论(0)