校正(c,实现OpenCV ) ) ) ) ) ) ) ) )。
1 .作用:
伽马校正是对输入图像灰度值进行的非线性操作,以使输出图像的灰度值与输入图像的灰度值成为指数关系:
伽马校正由以下幂律表达式定义:
2 .函数原型
voidcalchist(constmat*images,int nimages,
常数int *通道,输入阵列掩码,
OutputArray hist,int dims,const int* histSize,
常数浮动* *范围,bool统一=true,bool accumulate=false;
//1 .输入的图像数组2 .输入数组的个数3 .通道数4 .掩码5 .直方图
//6 .直方图维度7 .直方图每个维度的大小数组8.1每个维度数组的范围9 .直方图是否均匀10 .累积标志
参数详细信息:
images :指向输入图像的指针。 它可以是多个图像,并且所有图像必须具有相同的深度(CV_8U or CV_32F )。 一个图像可以同时具有多个通道。
nimages :输入映像的数量
channels :需要统计直方图的第几个频道? 用于计算直方图的channes数组。 例如,如果输入是两个图像,第一个图像包含0、1和2共三个通道,而第二个图像只有0个通道,则输入将使用总共四个通道和第一个通道。 int channels [3]={ 3,2,0 }表示它是使用第二个图像的第一个通道和第一个通道
3 .实现:
语音流量校正(mat src、Mat dst、const float fGamma ) )。
{
unsigned char酷希望[256]
for(intI=0; i 256; I )
{
酷的希望[I]=saturate_cast(pow ) (float ) (i/255.0 )、fGamma ) * 255.0f );
}
dst=src.clone (;
const int channels=dst.channels (;
交换机(通道) )。
{
case 1:
{
MatIterator_ it,end;
for(it=dst.Begin )、end=dst.end ); it!=结束; it )
*it=酷酷的希望[(*it ) ]
布雷克;
}
case 3:
{
MatIterator_ it,end;
for(it=dst.Begin )、end=dst.end ); it!=结束; it )
{
(it ) [0]=酷希望() ) it ) [0] );
(it ) [1]=酷希望() ) it ) [1] );
(it ) [2]=酷希望() ) it ) [2] );
}
布雷克;
}
}
}
int main () )
{
matimage=im read (c :\ users\ administrator\ desktopIRIR.BMP );
if(image.empty ) )
{
cout ' error : could not loadimage ' endl;
返回0;
}
Mat dst;
float fGamma=1/2.0;
getgammacorrection(image、dst、fGamma );
im show (源图像)、image );
imshow(dst )、dst );
STD :3360 string filename=' c :\ _ users\ administrator\ desktop\ IR\ dst2IR.BMP ';
cv :3360 im写入(文件名,dst );
cv :3360等待密钥(0;
返回0;
}
4 .效果
未进行伽马校正,进行伽马校正后保存的图像信息如下。
如果未进行伽马校正,则对于低灰度,大范围的灰度值将保存为相同的值,并观察到信息丢失。 对于相同的高灰度值,许多相对接近的灰度值存储为不同的值,从而浪费空间。 伽马校正提高了存储的有效性和效率。
5 .原理
6 .参考