为了支持进行图像处理测试,老猿将一些经常需要使用到的功能做成了函数放到了公用模块opencvPublic中,在博文中的代码直接引用了这些函数,但对阅读博文的读者可能会造成了一定的困难,为此老猿将在本文中就这些公用函数的功能和调用格式进行统一说明,后续博文中都不再单独介绍。大家可以根据功能介绍实现自己的函数来配合测试,老猿实现的代码在付费专栏《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》的博文《OpenCV-Python图形图像处理:博主自用的一些工具函数源代码》中提供给大家参考。
readImgFile(filename,bConvertGray=False,bConvertBinImg=False,bConvertKernal = False)
将图像文件读入,根据参数决定是否转换为灰度图、二值图和核矩阵,支持中文文件名和目录名的处理。
replaceImgBySpecImgRefPoint(largeImg,largeImgRefPoint,smallImg,smallImgRefPoint,overlyBlackMaxValue=None)
replaceImgRegionBySpecImg(srcImg, regionTopLeftPos, specImg,overlyBlackMaxValue=None)
该函数调用replaceImgBySpecImgRefPoint完成处理,将srcImg的regionTopLeftPos开始位置的一个矩形图像替换为specImg,用specImg对应图像的左上角与srcImg的regionTopLeftPos对齐。
overlyBlackMaxValue: 为None表示大图像对应区域用小图像简单替代,否则根据smallImg是否有对应灰度值小于overlyBlackMaxValue的像素, 如果有结果图像中这部分像素则保持大图部分的像素不变,其他部分则使用小图对应像素替代。
返回已经copy或融合小图像的大图像。
previewImg(img)
调用操作系统默认图像阅读器预览img图像矩阵对应图像。
preparePreviewImg(imgTitle=None,img=None,firstImg=False)
将图像img加到预览图像列表,在图像下方增加imgTitle对应的文字说明,firstImg如果为True,将前面已经放到预览列表的图像清空。注意加入进去后并不立即显示图像,只有后续调用previewImgList函数时才会将在列表中所有图像一起在一个大合成图片中显示。该函数会返回img下方添加了imgTitle说明的图片矩阵。
previewImgList()
将通过preparePreviewImg放到列表中的图像合并排列后展示出来。
imgAddText(img,text,fontSize=24,vRefPos=‘B’,hRefPos = ‘C’,extendVPos=‘B’,extendLines=0,extendColor=128)
给图像增加文字,根据参数确认文字添加位置,并确认是否需要在图像顶部或底部增加图像高度
mergeImg(imgList)
将imgList的图像矩阵列表中的图像合并成一张大图像。
print2DMatrix(matrix)
将2阶矩阵按照行和列方式打印输出每个元素
cmpMatrix(m1,m2)
比较两个矩阵是否一致,一致返回True,否则False。
addWeightedDistinguishBLK(img1, alpha, img2, beta, sigma, gamma=0.0)
相同大小的图像img1和img2权重相加,但图像img2中像素为黑色的部分取img1的像素权重为sigma, 参数img1, alpha, img2, beta, gamma与addWeighted的参数相同,sigma为img1中对应img2黑色部分范围的权重
addWeightedSmallImgToLargeImgDstgshBLK(largeImg,alpha,smallImg,beta,sigma,gamma=0.0,regionTopLeftPos=(0,0))
将小图像与大图像指定位置的内容融合,但对小图像透明部分单独处理,取大图像sigma的权重部分。
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(img,x,y,size)
对图像进行平移变换,img为输入图像,x、y分别表示x和y轴的平移距离,size为目标图像大小。
matrixMultiply(*mList)
对mList中对应的二维矩阵进行连乘,返回结果矩阵。
constructRectFrom4Points(pointList)
从4个点对应的四边形构建一个矩形。依据一个四边形构建一个和坐标轴平行的矩形,构建原则是取四边形左上角的点为矩形的左上角点,四边形上边和下边x、y坐标的最大差距作为矩形横边的边长,以及侧边的边长。
overlyImgs(bottomImg,topImg,blackMaxVal=0)
将两个图叠加,叠加时上层图非透明部分遮挡下层图对应部分,上层图透明部分则不遮挡下层图
blackMaxVal:灰度值小于等于该值的都作为透明黑色处理,如果是彩色图像则以彩色转灰度后的值作为比较
addImgToLargeImg(smallImg,largeImg,largPos,blackMaxVal=0)
rotationImg(img,angle)
将图像img逆时针旋转angle度,返回旋转后的图像。
getTextSize(text,fontSize=24)
获取text对应文本在字体大小为fontSize时的宽度和高度,单位为像素,返回的是一个宽度和高度二元组。
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
更多OpenCV-Python的介绍请参考专栏《OpenCV-Python图形图像处理 》
专栏网址:https://blog.csdn.net/laoyuanpython/category_9979286.html
前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。
对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。
如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。