OpenCV查找表修改图像外观

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。对图像应用这种查找表后,会生成原始图像的反向图像。使用上文的图像,得到的结果如下所示。

OpenCV查找表修改图像外观

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!