当前位置: 首页 > news >正文

OpenCV-Python图形图像处理:自用的一些工具函数功能及调用语法介绍

☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython ░

一、引言

为了支持进行图像处理测试,老猿将一些经常需要使用到的功能做成了函数放到了公用模块opencvPublic中,在博文中的代码直接引用了这些函数,但对阅读博文的读者可能会造成了一定的困难,为此老猿将在本文中就这些公用函数的功能和调用格式进行统一说明,后续博文中都不再单独介绍。大家可以根据功能介绍实现自己的函数来配合测试,老猿实现的代码在付费专栏《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》的博文《OpenCV-Python图形图像处理:博主自用的一些工具函数源代码》中提供给大家参考。

二、readImgFile

语法:

readImgFile(filename,bConvertGray=False,bConvertBinImg=False,bConvertKernal = False)

说明:

将图像文件读入,根据参数决定是否转换为灰度图、二值图和核矩阵,支持中文文件名和目录名的处理。

三、replaceImgBySpecImgRefPoint

语法:

replaceImgBySpecImgRefPoint(largeImg,largeImgRefPoint,smallImg,smallImgRefPoint,overlyBlackMaxValue=None)

说明:

  • 将一个小图像的内容copy到大图像中,要求小图像的smallImgRefPoint对应点和大图像的largeImgRefPoint对应点重合。
  • largeImgRefPoint/smallImgRefPoint都是(X,Y)形式,其值都是对应点在自身图像的位置。
  • overlyBlackMaxValue:为None表示大图像对应区域用小图像简单替代,否则根据smallImg是否有对应灰度值小于overlyBlackMaxValue的像素, 如果有结果图像中这部分像素则保持大图部分的像素不变,其他部分则使用小图对应像素替代
  • 返回已经copy或融合小图像的大图像

四、replaceImgRegionBySpecImg

语法:

replaceImgRegionBySpecImg(srcImg, regionTopLeftPos, specImg,overlyBlackMaxValue=None)

说明:

该函数调用replaceImgBySpecImgRefPoint完成处理,将srcImg的regionTopLeftPos开始位置的一个矩形图像替换为specImg,用specImg对应图像的左上角与srcImg的regionTopLeftPos对齐。

overlyBlackMaxValue: 为None表示大图像对应区域用小图像简单替代,否则根据smallImg是否有对应灰度值小于overlyBlackMaxValue的像素, 如果有结果图像中这部分像素则保持大图部分的像素不变,其他部分则使用小图对应像素替代。

返回已经copy或融合小图像的大图像。

五、previewImg

语法:

previewImg(img)

说明:

调用操作系统默认图像阅读器预览img图像矩阵对应图像。

六、preparePreviewImg

语法:

preparePreviewImg(imgTitle=None,img=None,firstImg=False,fontSize=36,color=(0,0,255))

说明:

将图像img加到预览图像列表,在图像下方增加imgTitle对应的文字说明,firstImg如果为True,将前面已经放到预览列表的图像清空。注意加入进去后并不立即显示图像,只有后续调用previewImgList函数时才会将在列表中所有图像一起在一个大合成图片中显示。该函数会返回img下方添加了imgTitle说明的图片矩阵,imgTitle的字体和颜色由fontSize和color指定。

七、previewImgList()

语法:

previewImgList()

说明:

将通过preparePreviewImg放到列表中的图像合并排列后展示出来。

八、imgAddText

语法:

imgAddText(img,text,fontSize=24,color=(0,0,255),vRefPos=‘B’,hRefPos = ‘C’,extendVPos=None,extendLines=0,extendColor=128)

说明:

给图像增加文字,根据参数确认文字添加位置,并确认是否需要在图像顶部或底部增加图像高度

  • param img: 源图像
  • param text: 需要增加的文字
  • font:字体文件,或类似cv2.FONT_HERSHEY_SIMPLEX定义的字体,如font=‘STFANGSO.TTF’
  • fontSize:字体大小
  • color:字体颜色,BGR格式
  • param vRefPos:文字添加的垂直对齐方式,'T’为顶部对齐,'B’为底部对齐,正数字n顶部下移n行,负数底部上移n行
  • param hRefPos:水平对齐方式,'L’左对齐,'R’右对齐,'C’居中,数字n左边空n列
  • param extendVPos:在什么位置扩展图像高度,None不扩展,'T’顶部扩展,否则为底部扩展,参数vRefPos的对齐方式是基于扩展后的图像
  • param extendLines:扩展高度的列数
  • extendColor:扩展颜色
  • return:增加了文字的图像

九、mergeImg

语法:

mergeImg(imgList)

说明:

将imgList的图像矩阵列表中的图像合并成一张大图像。

十、print2DMatrix

语法:

print2DMatrix(matrix)

说明:

将2阶矩阵按照行和列方式打印输出每个元素

十一、cmpMatrix

语法:

cmpMatrix(m1,m2)

说明:

比较两个矩阵是否一致,一致返回True,否则False。

十二、addWeightedDistinguishBLK

语法:

addWeightedDistinguishBLK(img1, alpha, img2, beta, sigma, gamma=0.0)

说明:

相同大小的图像img1和img2权重相加,但图像img2中像素为黑色的部分取img1的像素权重为sigma, 参数img1, alpha, img2, beta, gamma与addWeighted的参数相同,sigma为img1中对应img2黑色部分范围的权重

十三、addWeightedSmallImgToLargeImgDstgshBLK

语法:

addWeightedSmallImgToLargeImgDstgshBLK(largeImg,alpha,smallImg,beta,sigma,gamma=0.0,regionTopLeftPos=(0,0))

说明:

将小图像与大图像指定位置的内容融合,但对小图像透明部分单独处理,取大图像sigma的权重部分。

十四、constructAffineMatrix

语法:

constructAffineMatrix(rotationAngle=0,xShearAngle=0,yShearAngle=0,translationX=0,translationY=0,scaleX=1,scaleY=1)

说明:

构建各种仿射变换的基础变换矩阵,详细参数及返回值如下:

    :param rotationAngle: 旋转角度,图像旋转时使用,逆时钟为正、顺时针为负,如顺时针旋转30°,则值为-30
    :param xShearAngle: 水平错切角,水平错切时使用
    :param yShearAngle: 垂直错切角,垂直错切时使用
    :param translationX: x轴平移距离
    :param translationY: y轴平移距离
    :param scaleX: 水平方向缩放因子
    :param scaleY: 竖直方向缩放因子
    :return: 构建的3*3矩阵
    补充说明:
    本函数只能构建旋转、错切、平移、缩放四种情况的一种矩阵,参数只取一种情况进行矩阵构造,
    取的情况按照旋转、错切、平移、缩放从高到低的优先级排列,高优先级的值非0则低优先级的值忽略。
    如果返回的矩阵为3*3矩阵,如果该矩阵立即调用warpAffine进行仿射变换,需要通过切片方式取前2行传入warpAffine,如果需要与其他仿射矩阵相乘,
    则必须保持3*3矩阵,相乘的结果再进行切片处理,因为两个2*3的矩阵之间没法相乘(矩阵乘法要求第一个矩阵的列数等于第二个矩阵的行数)

  

十五、translation

语法:

translation(img,x,y,size)

说明:

对图像进行平移变换,img为输入图像,x、y分别表示x和y轴的平移距离,size为目标图像大小。

十六、matrixMultiply

语法:

matrixMultiply(*mList)

说明:

对mList中对应的二维矩阵进行连乘,返回结果矩阵。

十七、constructRectFrom4Points

语法:

constructRectFrom4Points(pointList)

说明:

从4个点对应的四边形构建一个矩形。依据一个四边形构建一个和坐标轴平行的矩形,构建原则是取四边形左上角的点为矩形的左上角点,四边形上边和下边x、y坐标的最大差距作为矩形横边的边长,以及侧边的边长。

十八、overlyImgs

语法:

overlyImgs(bottomImg,topImg,blackMaxVal=0)

说明:

将两个图叠加,叠加时上层图非透明部分遮挡下层图对应部分,上层图透明部分则不遮挡下层图
blackMaxVal:灰度值小于等于该值的都作为透明黑色处理,如果是彩色图像则以彩色转灰度后的值作为比较

十九、addImgToLargeImg

语法:

addImgToLargeImg(smallImg,largeImg,largPos,blackMaxVal=0)

说明:

  • 将小图像放到大图像中,小图像左上角与大图像的largPos位置重合,叠加时上层图非透明部分遮挡下层图对应部分,上层图透明部分(灰度值小于等于blackMaxVal的像素)则不遮挡下层图
  • 如果小图像放置到的位置导致小图像超出范围,则截掉超出范围的部分
  • 如果largPos的坐标出现负数,则将小图像在负数范围内的内容去除,从该坐标为0的位置开始显现未截除部分
  • blackMaxVal:灰度值小于等于该值的都作为透明黑色处理,如果是彩色图像则以彩色转灰度后的值作为比较

二十、rotationImg

语法:

rotationImg(img,angle)

说明:

将图像img逆时针旋转angle度,返回旋转后的图像。

二十一、getTextSize

语法:

getTextSize(text,fontSize=24)

说明:

获取text对应文本在字体大小为fontSize时的宽度和高度,单位为像素,返回的是一个宽度和高度二元组。

写博不易,敬请支持:

如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

更多OpenCV-Python的介绍请参考专栏《OpenCV-Python图形图像处理 》
专栏网址:https://blog.csdn.net/laoyuanpython/category_9979286.html

关于老猿的付费专栏

  1. 付费专栏《https://blog.csdn.net/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.csdn.net/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
  2. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
  3. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录 》。

前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

跟老猿学Python、学OpenCV!

☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░

相关文章:

  • OpenCV-Python图形图像处理:split通道拆分和数组矩阵访问通道
  • Python图像处理:OpenCV HSV和标准表示法的区别以及转换
  • OpenCV-Python图像处理:用inRange刷选图像中指定颜色对象案例
  • PyQt事件信号实战:为QTableWidget提供键盘事件
  • OpenCV-Python图像处理:区分前景背景权重的图像融合案例
  • 2020年总结:平安辞旧岁,老牛自奋蹄!
  • OpenCV-Python图像处理:插值方法及使用resize函数进行图像缩放
  • Python3装饰器的隐秘角落
  • 一种利用Python库解决视频课程检测窗口是否活动的简单方法
  • 人工智能数学基础6:极限、极限运算、ε-δ语言、ε-N语言、级数和函数连续性
  • 人工智能数学基础专栏目录
  • 人工智能数学基础8:两个重要极限及夹逼定理
  • 人工智能数学基础9:集合相关概念
  • 人工智能数学基础10:域、函数及相关概念
  • 人工智能数学基础-线性代数1:向量及向量加减法与数乘
  • 【Linux系统编程】快速查找errno错误码信息
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • canvas 高仿 Apple Watch 表盘
  • ES6之路之模块详解
  • magento2项目上线注意事项
  • nfs客户端进程变D,延伸linux的lock
  • oschina
  • Python打包系统简单入门
  • rc-form之最单纯情况
  • XForms - 更强大的Form
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 对象管理器(defineProperty)学习笔记
  • 高性能JavaScript阅读简记(三)
  • 那些被忽略的 JavaScript 数组方法细节
  • 前端面试题总结
  • 如何在 Tornado 中实现 Middleware
  • 三分钟教你同步 Visual Studio Code 设置
  • 深度学习在携程攻略社区的应用
  • 什么是Javascript函数节流?
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 问题之ssh中Host key verification failed的解决
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 通过调用文摘列表API获取文摘
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • #HarmonyOS:软件安装window和mac预览Hello World
  • (3)llvm ir转换过程
  • (6)设计一个TimeMap
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (接口自动化)Python3操作MySQL数据库
  • (九)c52学习之旅-定时器
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (四)c52学习之旅-流水LED灯
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (一)为什么要选择C++
  • .NET CORE 第一节 创建基本的 asp.net core
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • /etc/motd and /etc/issue
  • /etc/sudoers (root权限管理)