OpenCV查找表修改图像外观,图像直方图提供了利用现有像素强度值进行场景渲染的方法。通过分析图像中像素值的分布情况,你可以利用这个信息来修改图像,甚至提高图像质量。本文将解释如何用一个简单的映射函数(称为查找表)来修改图像的像素值。我们即将看到,查找表通常根据直方分布图生成。
如何实现
查找表是个一对一(或多对一)的函数,定义了如何把像素值转换成新的值。它是一个一维数组,对于规则的灰度图像,它包含256个项目。利用查找表的项目i,可得到对应灰度级的新强度值,如下所示:
newIntensity= lookup[oldIntensity];
OpenCV中的cv::LUT函数在图像上应用查找表生成一个新的图像。查找表通常根据直方图生成,因此在Histogram1D类中加入了这个函数:
static cv::Mat applyLookUp(const cv::Mat& image, // 输入图像
const cv::Mat& lookup) {// uchar类型的1×256 数组
// 输出图像
cv::Mat result;
// 应用查找表
cv::LUT(image, lookup, result);
return result;
}
实现原理
在图像上应用查找表后会得到一个新图像,新图像的像素强度值被修改为查找表中规定的值。下面是一个简单的转换过程:
// 创建一个图像反转的查找表
cv::Mat lut(1,256, CV_8U); // 256×1 矩阵
for (int i=0; i<256; i++) {
// 0 变成255、1 变成254,以此类推
lut.at<uchar>(i)= 255-i;
}
这个转换过程对像素强度进行了简单的反转,即强度0变成255、1变成254、最后255变成0。对图像应用这种查找表后,会生成原始图像的反向图像。使用上文的图像,得到的结果如下所示。
酷客网相关文章:
评论前必须登录!
注册