图像缩放

目前比较常用的就是opencv-python底下的cv2.resize()

cv2.resize(src, size, fx, fy, interpolation)

其中src是输入原始图像,size为缩放的尺寸,fx为可选择的沿水平轴的比例因子,fy为可选择的沿垂直轴的比例因子,interpolation是可选择的插值方法,其中有:cv.INTER_NEAREST最近邻插值;cv.INTER_LINEAR双线性插值;cv.INTER_CUBIC三次样条插值;cv.INTER_AREA区域插值,默认是使用cv.INTER_LINEAR。

一般使用样例:

import cv2
# 原始图像读取
image = cv2.imread("XX.jpg")
# 输入你想要resize的图像尺寸。
size = 640
image_resize = cv2.resize(image, size)

目录下图像的遍历resize并保存:

import os
import cv2
# 输入原始图像存在的文件夹
datadir = "XXX"
# 设置保存路径
save_path = 'XXX'
if not os.path.exists(save_path):#如果路径不存在
    os.makedirs(save_path)
# 输入你想要resize的图像尺寸。
SIZE = 640
#使用os.path生成路径。
path = os.path.join(datadir)
#使用os.listdir返回path路径下所有图像文件。
img_list = os.listdir(path)
# 遍历图像文件
for i in img_list:
    img_array = cv2.imread(os.path.join(path, i), cv2.IMREAD_COLOR)
    # resize
    new_image = cv2.resize(img_array, (SIZE, SIZE))
    os.path.join(save_path, str(i)) # 保存的图片与原始图片同名
    #保存图片
    cv2.imwrite(save_path, new_image)

等比例缩放

在这里,我只总结一个我自己使用的cv2下的等比例resize。

同样,一般使用案例:

import cv2
# 原始图像读取
image = cv2.imread("XX.jpg")
# 输入你想要resize的图像高。
size = 640
# 获取原始图像宽高。
height, width = image.shape[0], image.shape[1]
# 等比例缩放尺度。
scale = height/size
# 获得相应等比例的图像宽度。
width_size = int(width/scale)
# resize
image_resize = cv2.resize(image, (width_size, size))

同样目录下使用:

import os
import cv2
# 输入原始图像存在的文件夹
datadir = "XXX"
# 设置保存路径
save_path = 'XXX'
if not os.path.exists(save_path):#如果路径不存在
    os.makedirs(save_path)
# 输入你想要resize的图像尺寸。
size = 640 
# 获取原始图像宽高。
height, width = image.shape[0], image.shape[1]
# 等比例缩放尺度。
scale = height/size    # 1
# 获得相应等比例的图像宽度。
width_size = int(width/scale)  # 2
#使用os.path生成路径。
path = os.path.join(datadir)
#使用os.listdir返回path路径下所有图像文件。
img_list = os.listdir(path)
# 遍历图像文件
for i in img_list:
    img_array = cv2.imread(os.path.join(path, i), cv2.IMREAD_COLOR)
    # resize
    new_image = cv2.resize(img_array, (width_size, size))
    os.path.join(save_path, str(i)) # 保存的图片与原始图片同名
    #保存图片
    cv2.imwrite(save_path, new_image)

我这里是按照修改高度,来等比例修改宽度的,如果你要先修改宽度,就调换一下1,2的位置就可以了。

实例

下面进行一个实例演示:

下面的代码是将图片照片转换为铅笔素描

import cv2
#读取图片
image = cv2.imread("A52E0B8D687A3566A556DF0D47109BC4.jpg")
#将BGR图像转换为灰度
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
#图像反转
inverted_image = 255 - gray_image
blurred = cv2.GaussianBlur(inverted_image, (21, 21), 0)
inverted_blurred = 255 - blurred
pencil_sketch = cv2.divide(gray_image, inverted_blurred, scale=256.0)
cv2.imshow("Artwork Master", image)
cv2.imshow("Pencil Sketch", pencil_sketch)
cv2.waitKey(0)

运行结果显示如下:

这样只能看见部分区域,并且无法放大和缩小:

解决办法如下:

import cv2
#读取图片
image = cv2.imread("A52E0B8D687A3566A556DF0D47109BC4.jpg")
size = 640
# 获取原始图像宽高。
height, width = image.shape[0], image.shape[1]
# 等比例缩放尺度。
scale = height/size
# 获得相应等比例的图像宽度。
width_size = int(width/scale)
# image
image = cv2.resize(image, (width_size, size))

#将BGR图像转换为灰度
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
#图像反转
inverted_image = 255 - gray_image
blurred = cv2.GaussianBlur(inverted_image, (21, 21), 0)
inverted_blurred = 255 - blurred
pencil_sketch = cv2.divide(gray_image, inverted_blurred, scale=256.0)
cv2.imshow("Artwork Master", image)
cv2.imshow("Pencil Sketch", pencil_sketch)
cv2.waitKey(0)

可在该处size = 640调节图片的大小,运行效果显示很好地解决了问题。

参考资料:https://blog.csdn.net/giganticpower/article/details/121309231

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐