首页 > 编程知识 正文

opencv转灰度(matlab做图像处理)

时间:2023-05-05 10:53:57 阅读:74456 作者:3737

校正(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 .参考

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。