dedecms 网站 经常无法连接,网站建站公司,wordpress中文版 乱码,长春网站制作机构【1】引言
前序已经学习了常规的图像读取操作和图像保存技巧#xff0c;相关文章链接为#xff1a;
python学opencv|读取图像-CSDN博客
python学opencv|读取图像#xff08;二#xff09;保存彩色图像-CSDN博客
今天我们更近一步#xff0c;学习放大和缩小图像的技巧相关文章链接为
python学opencv|读取图像-CSDN博客
python学opencv|读取图像二保存彩色图像-CSDN博客
今天我们更近一步学习放大和缩小图像的技巧力求掌握cv.resize()函数的用法。
【2】opencv官方教程
点击系下述链接可以直达官网教程
OpenCV: Geometric Image Transformations
在官网有很多函数今天主要学习下述内容 图1
其实这里讲的比较简单综合起来就是
resize(src, dst, dst.size(), fx, fy, interpolation)
src输入图像必须有这是修改大小的初始条件
dst输出图像如果不为0大小和dsize一致否则就,通过输入计算fx和fy输出图像和输入图像的类型一致
dsize输出图像的大小如果0或者none就用fx和fy来修改图像
fx水平方向放大因子
fy竖直方向放大因子
interpolation插值方法。
【3】代码测试
在上述基础上输入以下代码做测试
import cv2 #引入CV模块# 读取图片
image cv2.imread(opencv-picture-001.png)# 定义放大因子
scale_factor 2# 放大图片使用立方插值
scaled_image cv2.resize(image, None, fxscale_factor, fyscale_factor, interpolationcv2.INTER_CUBIC) #INTER_CUBIC插值# 保存结果
cv2.imwrite(scaled_image-22-INTER_CUBIC.png, scaled_image)# 显示结果
cv2.imshow(Scaled Image, scaled_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
在这里使用的原图像为opencv-picture-001.png 图2
用了两倍的放大因子scale_factor2
使用的插值方法为cv2.INTER_CUBIC
运行后的输出图像为 图3
上传网站后好像图2和图3没有区别我们看一下它们的大小 图4
可见图3相对于图2确实是分别率扩大了两倍。
【4】插值方法测试
在上述测试案例上我们获得的放大图像在上传CSDN网站后依然清晰。
实际上改变图像大小有多种插值方法相关链接为
OpenCV: Geometric Image Transformations
我们主要研究一下前面三种 图5
更新插值和保存图像代码为 # 放大图片使用不同插值方法
scaled_image cv2.resize(image, None, fx2, fy2, interpolationcv2.INTER_CUBIC) #INTER_CUBIC插值
scaled_image1 cv2.resize(image, None, fx0.2, fy2.2, interpolationcv2.INTER_NEAREST)
scaled_image2 cv2.resize(image, None, fx0.5, fy0.5, interpolationcv2.INTER_LINEAR )
# 保存结果
cv2.imwrite(scaled_image-22-INTER_CUBIC.png, scaled_image)
cv2.imwrite(scaled_image-22-INTER_NEAREST.png, scaled_image1)
cv2.imwrite(scaled_image-22-INTER_LINEAR.png, scaled_image2) 获得的cv2.INTER_NEAREST和cv2.INTER_LINEAR插值图像为 图6 cv2.INTER_NEAREST
图6是使用NEAREST插值方法横向缩小为原来的0.2倍竖向扩大为原来的2.2倍后的效果。 图7 cv2.INTER_LINEAR
图7是使用 LINEAR插值方法横向和竖向均缩小为原来的0.5倍后的图像。
之后我们继续修改使图像的放大因子保持一致 scaled_image cv2.resize(image, None, fx2, fy2, interpolationcv2.INTER_CUBIC) #INTER_CUBIC插值
scaled_image1 cv2.resize(image, None, fx2, fy2, interpolationcv2.INTER_NEAREST)
scaled_image2 cv2.resize(image, None, fx2, fy2, interpolationcv2.INTER_LINEAR )
# 保存结果
cv2.imwrite(scaled_image-220-INTER_CUBIC.png, scaled_image)
cv2.imwrite(scaled_image-220-INTER_NEAREST.png, scaled_image1)
cv2.imwrite(scaled_image-220-INTER_LINEAR.png, scaled_image2) 此时获得的图像为 图8 从上到下CUBIC-NEAREST-LINEAR
相对来说CUBIC插值法获得的图像清晰度最好。
此时的完整代码为
import cv2 #引入CV模块# 读取图片
image cv2.imread(opencv-picture-001.png)# 定义放大因子
scale_factor 2# 放大图片使用不同插值方法
scaled_image cv2.resize(image, None, fx2, fy2, interpolationcv2.INTER_CUBIC) #INTER_CUBIC插值
scaled_image1 cv2.resize(image, None, fx2, fy2, interpolationcv2.INTER_NEAREST)
scaled_image2 cv2.resize(image, None, fx2, fy2, interpolationcv2.INTER_LINEAR )
# 保存结果
cv2.imwrite(scaled_image-220-INTER_CUBIC.png, scaled_image)
cv2.imwrite(scaled_image-220-INTER_NEAREST.png, scaled_image1)
cv2.imwrite(scaled_image-220-INTER_LINEAR.png, scaled_image2)
# 或者显示结果
cv2.imshow(Scaled Image, scaled_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
【5】总结
探索了使用pythonopencv放大和缩小图像的方法。
经过对比不同的插值方法发现CUBIC插值法获得的图像清晰度最好。