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
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值