文章目录:

  • 1 查看cv2.LUT(src, lut, dst=None)函数的使用
    • 1.1 LUT函数的python接口cv2.LUT()的参数说明
    • 1.2 LUT函数在C++中的定义
  • 2 cv2. LUT(src, lut, dst=None)实例
    • 2.1 使用cv.LUT增加亮度
    • 2.2 正常增加亮度

1 查看cv2.LUT(src, lut, dst=None)函数的使用

LUT是look-up table查找表的意思,cv2.LUT(src, lut, dst=None)的作用是对输入的src执行查找表lut转换

1.1 LUT函数的python接口cv2.LUT()的参数说明

1、打印输出cv2.LUT()文档的使用

print(cv2.LUT.__doc__)

>>> print(cv2.LUT.__doc__)
LUT(src, lut[, dst]) -> dst
.   @brief Performs a look-up table transform of an array.
.
.   The function LUT fills the output array with values from the look-up table. Indices of the entries
.   are taken from the input array. That is, the function processes each element of src as follows:
.   \f[\texttt{dst} (I)  \leftarrow \texttt{lut(src(I) + d)}\f]
.   where
.   \f[d =  \fork{0}{if \(\texttt{src}\) has depth \(\texttt{CV_8U}\)}{128}{if \(\texttt{src}\) has depth \(\texttt{CV_8S}\)}\f]
.   @param src input array of 8-bit elements.
.   @param lut look-up table of 256 elements; in case of multi-channel input array, the table should
.   either have a single channel (in this case the same table is used for all channels) or the same
.   number of channels as in the input array.
.   @param dst output array of the same size and number of channels as src, and the same depth as lut.
.   @sa  convertScaleAbs, Mat::convertTo
>>>

2、 cv2.LUT(src, lut, dst=None)参数说明

cv2. LUT(src, lut, dst=None)有三个参数,分别为:

  • src:输入数据array,类型为8位整型(np.uin8)
  • lut查找表,如果输入src是多通道的,例如是BGR三通到的图像,而查表是单通道的,则此时B、G、R三个通道使用的是同一个查找表
  • dst=None:输出数组,大小和通道数与src相同,而深度depth与lut相同

函数LUT查找表中的值填充输出数组,LUT函数对src中的每个元素的处理如下:

dst(I)←lut(src(I)+d)\texttt{dst} (I) \leftarrow \texttt{lut(src(I) + d)}dst(I)←lut(src(I) + d)

其中d的取值为:

d={0if src has depth CV_8U128if src has depth CV_8Sd= \begin{cases} 0& \text{if src has depth } \texttt{CV\_8U}\\ 128& \text{if src has depth } \texttt{CV\_8S} \end{cases}d={0128​if src has depth CV_8Uif src has depth CV_8S​

CV_8U和CV_8S的含义(数据类型的宏定义):

  • CV_8U:8位无符号整数,取值范围(0,255)
  • CV_8S :8位有符号整数,取值范围(-128,127)

1.2 LUT函数在C++中的定义

void cv::LUT定义在core/src/lut.cpp,源码是C++的代码,我看不太懂,感兴趣的可以自己去阅读

2 cv2. LUT(src, lut, dst=None)实例

2.1 使用cv.LUT增加亮度

__Author__ = "Shliang"
__Email__ = "shliang0603@gmail.com"import numpy as np
import cv2def adjust_brightness(img_path, brightness_factor):img = cv2.imread(img_path)# clip(0, 255)会把处理后的像素值的大小,现在在[0, 255]范围内,如果有值大于255则取255,如果有值小于0则取值0table = np.array([i * brightness_factor for i in range (0,256)]).clip(0,255).astype('uint8')# 单通道imgif img.shape[2] == 1:return cv2.LUT(img, table)[:,:,np.newaxis]# 多通道imgelse:result = cv2.LUT(img, table)# 左边原图、右边增加亮度后的图imgs_hstack = np.hstack((img, result))cv2.imwrite("adjust_brightness_result.png", imgs_hstack)cv2.imshow("result", imgs_hstack)cv2.waitKey(0)return resultif __name__ == '__main__':adjust_brightness("./img.png", brightness_factor=1.5)

下面是结果:左边是原图,右边是增加亮度后的图

2.2 正常增加亮度

  • alpha=1:图片的对比度不发生变化

  • alpah>1:时对比度增强,图像看起来更加清晰;

  • alpah<1:时对比度减弱,图像看起来变模糊;

  • beta>0:值越大,图像的亮度增加的越强烈

import numpy as np
import cv2# 参考: https://blog.csdn.net/qq_33840601/article/details/90400375
def Contrast_and_Brightness(alpha, beta, img_path):img = cv2.imread(img_path)blank = np.zeros(img.shape, img.dtype)## dst = alpha * img + (1-alpha) * blank + betadst = cv2.addWeighted(img, alpha, blank, 1 - alpha, beta)imgs_hstack = np.hstack((img, dst))while True:cv2.imwrite("add_brightness_result.png", imgs_hstack)cv2.imshow("result", imgs_hstack)if cv2.waitKey(1) == ord("q"):breakcv2.destroyAllWindows()return dstif __name__ == '__main__':Contrast_and_Brightness(1, 100, "./img.png")

这种方式是把图片中的每个像素值都加上beta,因此,图片也是均匀的增加亮度,就像蒙上一层膜一样

参考:https://blog.csdn.net/Dontla/article/details/103963085
参考 # opencv官方文档对LUT API的解释
参考:https://vimsky.com/examples/detail/python-attribute-cv2.LUT.html # LUT的使用案例

欢迎大家关注笔者,你的关注是我持续更博的最大动力

原创文章,转载告知,盗版必究
微信:suihailiang0816 QQ:931762054 wx公众号:仰望星空的小随

python opencv的函数cv2.LUT(src, lut, dst=None)的具体使用(LUT:查找表)相关推荐

  1. python opencv resize函数_Python OpenCV中的resize()函数的使用

    改变图像大小意味着改变尺寸,无论是单独的高或宽,还是两者.也可以按比例调整图像大小. 这里将介绍resize()函数的语法及实例. 语法 函数原型 cv2.resize(src, dsize[, ds ...

  2. Python OpenCV 图像缩放 cv2.resize 方法

    今天是持续写作的第 42 / 100 天. 如果你有想要交流的想法.技术,欢迎在评论区留言. 本篇博客只学习一个方法,cv2.resize 即图像缩放. 取经之旅第 9 天 铺垫知识 resize 方 ...

  3. python opencv写视频——cv2.VideoWriter()

    python opencv写视频--cv2.VideoWriter() 函数原型 cv2.VideoWriter() VideoWriter(filename, fourcc, fps, frameS ...

  4. python怎么导入opencv_对python opencv 添加文字 cv2.putText 的各参数介绍

    如下所示: cv2.putText(img, str(i), (123,456)), font, 2, (0,255,0), 3) 各参数依次是:图片,添加的文字,左上角坐标,字体,字体大小,颜色,字 ...

  5. python中的字体英文名_对python opencv 添加文字 cv2.putText 的各参数介绍

    如下所示: cv2.putText(img, str(i), (123,456)), font, 2, (0,255,0), 3) 各参数依次是:图片,添加的文字,左上角坐标,字体,字体大小,颜色,字 ...

  6. python OpenCV 绘图函数

    OpenCV可以用来绘制不同的集合图形,包括直线,矩形,圆,椭圆,多边形以及在图片上添加文字.用到的绘图函数包括 cv2.line(),cv2.circle(),cv2.rectangle() ,cv ...

  7. python opencv imread()函数 (从文件加载图像)

    def imread(filename, flags=None): # real signature unknown; restored from __doc__"""i ...

  8. python opencv imread()函数,关于:灰度图(二维数组图),彩色图(三维数组图)

    使用函数cv2.imread(filepath,flags)读入一副图片 filepath:要读入图片的完整路径 flags:读入图片的标志 cv2.IMREAD_COLOR:默认参数,读入一副彩色图 ...

  9. python opencv resize函数_OpenCV尺寸调整函数resize

    void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation ...

最新文章

  1. 大学java专业核心课程_计算机应用技术专业核心课程有哪些?
  2. python xpath语法-Python爬虫基础之XPath语法与lxml库的用法详解
  3. JZOJ 5474. 【NOIP2017提高组正式赛】时间复杂度
  4. SQL Server 查询性能优化——覆盖索引(二)
  5. jQuery 插件格式 规范
  6. win7计算机记忆窗口,Win7系统关闭和打开搜索记忆功能的方法(图文教程)
  7. qt android .so反编译,Qt5 程序初步逆向分析+解析脚本
  8. 计算机图标制作教程,电脑主题ICO图标制作方法 详细教程你一学就会
  9. python判断是否为素数_python判断一个数是否为素数
  10. Python电商数据分析实战案例
  11. Android加固与脱壳分析
  12. 观阿凡达水之道之感想
  13. c语言恶搞小程序自动关机,C语言的自动关机程序及捉弄人的小程序.doc
  14. 数据安全法下,企业如何平衡数据安全合规与业务性能?
  15. Linux下安装gitea
  16. 计算机基础知识填空题和选择题,计算机基础知识题库选择题(参考).doc
  17. Ubuntu 18.04 如何固定图标到任务栏
  18. Bug 生命周期 中的 各个状态!
  19. 关于java.lang.IllegalArgumentException: DrawerLayout must be measured with MeasureSpec.EXACTLY异常处理
  20. 分布式数据库系统面临的问题和挑战

热门文章

  1. Mysql海量数据分页查询优化
  2. Android_多渠道打包_混淆
  3. DNS污染——domain name的解析被劫持了返回无效的ip
  4. Linux安装tomcat,配置环境变量
  5. 谷歌浏览器共存,一个用户可拥有多个版本谷歌浏览器
  6. 关于养猫的简单经验教训
  7. Kubernetes学习
  8. java作用域范围_比较java中四个域的作用域范围大小
  9. 判断指定日期为当年第几天(Java实现)
  10. ZOJ 3864 Quiz for EXO-L