首页 > 编程知识 正文

python图像处理opencv,opencv resize函数踩坑

时间:2023-05-05 13:41:04 阅读:15717 作者:2406

老猴子Python博客https://blog.csdn.net/laoyuanpython图像缩放用于缩小或放大图像。 缩小图像时需要对输入图像重新采样以去除一些像素,放大图像时需要在输入图像上基于算法生成一些像素。 两者都利用插值算法来实现。

另一方面,支持的插值算法表明,OpenCV支持的插值算法包括下表中的前六种,后一些是补充标记而不是插值算法。

相关插值算法比较(见《OpenCV图像缩放resize各种插值方式的比较》 ) :

速度比较:在使用INTER_NEAREST (最近邻插值(INTER_LINEAR )线性插值) INTER_CUBIC (三次样条插值) INTER_AREA (区域插值) )缩小图像时,为了避免莫尔条纹现象

关于线性插值的介绍,老猴子认为最容易理解的是知道的《【数学】线性插值》介绍,它简单易懂地介绍了线性插值、双线性插值、双线性三次插值。 关于最近邻插值和双线性插值的原理,请参照《OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)》。 关于愚蠢的咖啡插值,请参阅《Lanczos插值,最邻近插值,双线性二次插值,三次插值》 《OpenCV图像缩放resize各种插值方式的比较》 《OpenCV中resize函数五种插值算法的实现过程》。 用c语言实现了五种插值算法。介绍了《OpenCV插值算法原理》最近邻插值和双线性插值的原理。 二、缩放函数resize介绍2.1、调用语法图像缩放的函数resize,可以按照指定的大小或缩放率对图像进行缩放。

DST=resize(src,dsize,dst=None,fx=None,fy=None,interpolation=None ) )。

2.2、参数和返回值说明src :输入图像dsize :缩放目标图像尺寸dst :目标图像不需要考虑dst的初始尺寸。 目标图像的初始尺寸由dsize或fx和fy指定。 在需要根据dst的尺寸确认结果图像尺寸的情况下,首先需要将dst对应尺寸分配给dsize fx :水平方向即宽度的变焦系数。 如果为0,则fx=dsize.width/src.cols,类型为带小数点的数字fy :垂直方向即高度的缩放因子,如果为0,则fy=dsize.height/src.rows,类型为带小数点的数字intints

必须同时指定dsize和fx/fy。 如果同时指定两者,则根据dsize忽略fx/fy。 缩放时未指定插值算法的结果与插值算法在INTER_LINEAR中的结果相同。 3、在以下情况下,导入两张大小不同的图像,相互参照,通过各种插值方法进行缩放,比较哪个插值方法与无插值参数的结果一致。

代码: import c v2 importnumpyasnpfromopencvpublicimportpreparepreviewimg,previewImgList,readImgFile, cmpmatrixdefmain(smallImg ) : inter method=[ cv2.inter _ nearest,cv2.INTER_LINEAR,cv2.INTER_CUBIC,cv2 cv2.inter_linear _ exact ] intermethodinf=[ ' inter _ nearest '、' inter _ linear '、' inter _ Cu cubic '、' inter ' inter _ linear _ exact ' ]信息='老猴子Python博客文章目录: https://blog.csdn.net/laoyuanpython/article/details/有关具体功能,请参阅https://blog.csdn.net/laoyuanpython/article/details/111351901 small img=read imgfile (small img, 请参阅False ) prepaaaalse。large img (preparepreviewimg (smallImg,smallImg ) imgnointermethod=cv2.resize ) small img largeimg.shape ) 0333666 imgnointermethod (forminzip ) intermethod,interMethodInf ) : m,i=mi imgM

= cv2.resize(smallImg,largeImg.shape[0:2],fx=0.8,fy=0.8,interpolation=m) preparePreviewImg('放大算法:'+i, imgM) if cmpMatrix(imgNoInterMethod,imgM): print(f"图像放大时未指定插值算法的结果与插值算法为{i}的结果相同") previewImgList() imgNoInterMethod = cv2.resize(largeImg, smallImg.shape[0:2]) preparePreviewImg('未指定放大算法', imgNoInterMethod) for mi in zip(interMethod, interMethodInf): m, i = mi imgM = cv2.resize(largeImg, smallImg.shape[0:2], interpolation=m ) preparePreviewImg('缩小算法:' + i, imgM) if cmpMatrix(imgNoInterMethod,imgM): print(f"图像缩小时未指定插值算法的结果与插值算法为{i}的结果相同") print(f"n更多学习资料请参考:n {information}") previewImgList() cv2.waitKey(0)main(r'f:pic咖啡狗.jpg',r'f:pic咖啡狗小图.JPG')

上述代码中从opencvPublic 导入的preparePreviewImg、previewImgList、readImgFile、cmpMatrix相关函数功能请参考《https://blog.csdn.net/LaoYuanPython/article/details/111351901 OpenCV-Python图形图像处理:自用的一些工具函数功能及调用语法介绍》的说明。

输出: 图像放大时未指定插值算法的结果与插值算法为INTER_LINEAR的结果相同图像缩小时未指定插值算法的结果与插值算法为INTER_LINEAR的结果相同更多学习资料请参考: 老猿Python博客文章目录:https://blog.csdn.net/LaoYuanPython/article/details/109160152,敬请关注同名微信公众号 图像放大预览结果:


由于预览图像高度太大被缩小了,放大一点看输入的两张图像,小的在右上角很小的地方:

下面是未指定放大算法的结果预览图:

其他的图像效果差异不是很大,就不展示了。

图像缩小预览图像: 四、小结

本节简单介绍了与图像缩放相关的插值算法、并详细介绍OpenCV图像缩放的函数resize相关的语法、参数以及应用案例。不同的插值算法对资源的开销不同,最终效果也会不一致,大家进行图像缩放时,如无特殊要求,插值算法使用默认值即可。

更多OpenCV-Python的介绍请参考专栏《OpenCV-Python图形图像处理》相关文章。

关于老猿的付费专栏

老猿的付费专栏《使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,付费专栏《moviepy音视频开发专栏》详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,两个专栏都适合有一定Python基础但无相关知识的tdld读者学习。

付费专栏文章目录:《moviepy音视频开发专栏文章目录》、《使用PyQt开发图形界面Python应用专栏目录》。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《专栏:Python基础教程目录》从零开始学习Python。

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

跟老猿学Python、学OpenCV! ☞ ░ 前往老猿Python博文目录 ░

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。