opencv中的灰度變換
阿新 • • 發佈:2019-02-10
/////////////////////////////////////////////////////////////////////
//
// 灰度線性變換函式
// 引數:
// src,輸入原影象
// dst,輸出影象,型別為CV_32F,大小及通道數與原影象相同
// mapping,灰度對映表,可以根據不同的變換函式,提前計算好影象的灰度對映表
//
////////////////////////////////////////////////////////////////////
void gray_trans(const Mat& src, Mat& dst,float* mapping)
{
int channels = src.channels();
if (channels == 1)
{
dst = Mat(src.size(), CV_32FC1);
for (int i = 0; i < src.rows; i++)
{
float* p1 = dst.ptr<float>(i);
const uchar* p2 = src.ptr<uchar>(i);
for (int j = 0; j < src.cols; j++)
p1[j] = mapping[p2[j]];
}
}
else if (channels == 3)
{
dst = Mat(src.size(), CV_32FC3);
for (int i = 0; i < src.rows; i++)
{
float* p1 = dst.ptr<float>(i);
const uchar* p2 = src.ptr<uchar>(i);
for (int j = 0; j < src.cols * 3; j+=3)
{
p1[j] = mapping[p2[j]];
p1[j+1] = mapping[p2[j+1]];
p1[j+2 ] = mapping[p2[j+2]];
}
}
}
}