【opencv】颜色映射表操作-applyColorMap()和LUT()函数使用介绍

这篇具有很好参考价值的文章主要介绍了【opencv】颜色映射表操作-applyColorMap()和LUT()函数使用介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

opencv颜色映射表操作-applyColorMap()和LUT()函数使用介绍

来自:ColorMaps in OpenCV。

人眼对颜色的变化更敏感,所以当一张灰度图的细微变化不是很明显时,可以对灰度图重新着色。

opencv提供函数applyColorMap()实现这种功能。其内部算法基本是查表法LUT实现,首先构建查找表,然后应用查找表。应用表的过程类似: d s t ( i , j ) = L U T ( s r c ( i , j ) ) dst(i,j) = LUT(src(i,j)) dst(i,j)=LUT(src(i,j)),LUT是事先创建好的表,每一个像素值都有它对应的值。

比如我们都知道Gamma校正, d s t = K ∗ E r = 255 ∗ E ( l o g ( p ( x , y ) / 255 ) ∗ g a m m a dst = K*E^r = 255 * E^{(log(p(x,y)/255)*gamma} dst=KEr=255E(log(p(x,y)/255)gamma, p ( x , y ) p(x,y) p(x,y)就是图像中坐标为(x,y)点处的像素值。

函数applyColorMap()声明如下:

C++

void cv::applyColorMap(InputArray src,OutputArray dst,int colormap);

void cv::applyColorMap(InputArray src,OutputArray dst,InputArray userColor);

python:

cv.applyColorMap(src, colormap[, dst]) ->	dst
cv.applyColorMap(src, userColor[, dst]) ->	dst

参数说明:

  • src,原始图像,灰度图或彩色图,图片格式为CV_8UC1或CV_8UC3(opencv4.5.4版本);
  • dst,色彩重映射后的图像;
  • colormap,应用的colormap,值为枚举类型ColormapTypes;
  • userColor,自定义的colormap,可以是CV_8UC1或CV_8UC3,大小为256

ColormapTypes枚举值:

【opencv】颜色映射表操作-applyColorMap()和LUT()函数使用介绍

使用示例,使用滑动条改变colorMap类型,观察每种类型的图片输出结果

def ColorMap_demo():
    img = cv.imread("lena.jpg",cv.IMREAD_GRAYSCALE)
    if img.shape[0]==0:
        print("load image fail!")
        return
    windowname="applyColorMap"
    cv.namedWindow(windowname,cv.WINDOW_AUTOSIZE)
    pos=0
    cv.createTrackbar("Type",windowname,pos,22,callback_trackbar)
    while True:
        pos = cv.getTrackbarPos("Type",windowname)
        imgdst = np.copy(img)
        if pos != 0 :
            imgdst = cv.applyColorMap(img,pos-1)
        cv.imshow(windowname,imgdst)
        if cv.waitKey(10) == 27:
            break
if __name__ == "__main__":
    ColorMap_demo()

结果显示,右边是读取的原始灰度图,左边是颜色映射后的图片。
【opencv】颜色映射表操作-applyColorMap()和LUT()函数使用介绍

函数cv::LUT()执行数组的查找表转换,函数声明:

// C++:
void cv::LUT(InputArray src, InputArray lut, OutputArray dst)		
# Python:
cv.LUT(	src, lut[, dst]	) ->	dst

参数说明:

  • src,8bit输入
  • lut,查找表,要与src保持通道一致;256个元素
  • dst,输出数组,大小和通道数与src一致,深度与LUT一致;

使用示例,gamma校正

def Gamma_LUT():
    # 构建查找表
    gamma = 0.7
    lut = np.zeros((256,1,3), dtype=np.uint8)  # 建立查找表
    for i in range(256):
        # print(i,'--',np.log(i/255.0))
        if i == 0:
            lut[i] = (0,0,0)
        else:
            tmp = int(np.exp(np.log(i / 255.0) * gamma) * 255.0)  # dst = K*E^r = 255 * E^(log(p(x,y)/255)*gamma
            lut[i]=(tmp,tmp,tmp)
    print(lut)
    # 应用表数据
    img = cv.imread("butterfly.jpg")
    cv.imshow("input", img)
    imgdst = cv.LUT(img,lut)
    cv.imshow("output_gamma", imgdst)
    cv.imwrite("lut2.jpg",imgdst)
    cv.waitKey(0)

if __name__ == "__main__":
    Gamma_LUT()

显示结果:

【opencv】颜色映射表操作-applyColorMap()和LUT()函数使用介绍文章来源地址https://www.toymoban.com/news/detail-501476.html

到了这里,关于【opencv】颜色映射表操作-applyColorMap()和LUT()函数使用介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Opencv-图像插值与LUT查找表

    图像像素的比较 白色是255,黑色是0 src1:第一个图像矩阵,通道数任意 src2:第二个图像矩阵,尺寸和通道数以及数据类型都需要与src1一致 dst:保留对应位置较大(较小)灰度值后的图像矩阵,尺寸、通道数和数据类型与src1一致 LUT查找表 LUT查找表实际上就是一种映射规则

    2024年02月20日
    浏览(27)
  • opencv-26 图像几何变换04- 重映射-函数 cv2.remap()

    重映射(Remapping)是图像处理中的一种操作,用于将图像中的像素从一个位置映射到另一个位置。重映射可以实现图像的平移、旋转、缩放和透视变换等效果。它是一种基于像素级的图像变换技术,可以通过定义映射关系来改变图像的几何形状和外观。 在重映射中,我们需要

    2024年02月15日
    浏览(37)
  • OpenCV各模块函数使用实例(11)--- 矩阵和数组操作(Operations on arrays)

    OpenCV各模块函数使用实例(11) M、 矩阵和数组操作( Operations on arrays ) 本节描述矩阵的基本操作,这些操作是图像处理和其他数组算法实现的基本操作,包括矩阵的运算,特征值和特征向量,范数和逆矩阵,高阶多项式的根等数学运算。矩阵运算包括点积,叉积,卷积,滤

    2024年02月03日
    浏览(27)
  • 【OpenCV常用函数:颜色空间转换、阈值化】cv2.cvtColor()+cv2.threshold()

    对图像进行颜色空间的转换 对图像进行阈值化/二值化

    2024年02月13日
    浏览(41)
  • VC++中使用OpenCV进行颜色检测

    在VC++中使用OpenCV进行颜色检测非常简单,首选读取一张彩色图像,并调用函数 cvtColor(img, imgHSV, COLOR_BGR2HSV); 函数将原图img转换成HSV图像imgHSV,再设置好HSV三个分量的上限和下限值,调用 inRange 函数 inRange(imgHSV, lower, upper, mask); 将HSV色彩图像转换成掩码图,掩码图中只有黑白二

    2024年01月21日
    浏览(29)
  • iTOP-3568开发板使用OpenCV处理图像-颜色转换

    本小节代码在配套资料“iTOP-3568 开发板\\03_【iTOP-RK3568 开发板】指南教程 \\04_OpenCV 开发配套资料\\05”目录下,如下图所示: cv2.cvtColor()函数功能: 将一幅图像从一个色彩空间转换到另一个色彩空间。 函数原型: cv2.cvtColor(src,code,dst=None,dstCn=None) 参数定义: src:要转换的源文件

    2024年02月12日
    浏览(27)
  • 使用OpenCV显示图像的RGB颜色直方图

    2024年02月13日
    浏览(37)
  • 使用 ESP32 CAM 和 OpenCV 进行颜色检测和跟踪

    这个项目是关于使用 ESP32 CAM 模块 和 OpenCV 进行颜色检测和跟踪的 。因此,我们将在 实时视频流 中检测任何特定颜色。颜色检测是识别物体所必需的,它也被用作各种图像编辑和绘图应用程序的工具。 这种方法与其他ESP32-CAM 颜色检测方法 完全不同,因为我们不是为 Microc

    2024年02月10日
    浏览(31)
  • 【Kotlin】Kotlin 与 Java 互操作 ① ( 变量可空性 | Kotlin 类型映射 | Kotlin 访问私有属性 | Java 调用 Kotlin 函数 )

    在 Java 语言 中 , 任何 引用类型变量 都可以为 空 null ; Java 中 八种 基本数据类型 变量 的 默认值 为 0 或 false ; 但是在 Kotlin 语言 中 , 所有的 变量 都是引用类型变量 , 没有基本数据类型 , 默认情况下 所有的变量 都为 非空类型 ; 下面分别定义一个 Java 类 和 Kotlin 脚本 , 在 K

    2024年02月02日
    浏览(48)
  • 用迅为RK3568开发板使用OpenCV处理图像颜色通道提取ROI

    本小节代码在配套资料“iTOP-3568 开发板\\03_【iTOP-RK3568 开发板】指南教程 \\04_OpenCV 开发配套资料\\07”目录下,如下图所示: 在计算机的色彩图像中存有三个通道,即 BGR 通道,根据三个颜色通道的亮度值来显示出不同的颜色,通过 imread()函数读取图像文件之后,图像信息会保

    2024年02月10日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包