京东电商的主图需要800*800和624*800两种不同的尺寸(不同类目有所不同),
得到的素材是一份800*800的图片,手动裁剪成624*800效率太低了,
python又派上用场了!
用cv2模块,可以快速将图片裁剪成所需要的大小,至于裁剪的位置嘛,需要事先计算一下。
改进方向:自动按中间的位置裁剪,再升级可以改进为自动识别中心位置并进行裁剪
【这次升级为批量裁剪啦!】
1. 安装cv2模块
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python
2. 新建 cut 和 out 文件夹
import numpy as np
import cv2
import os
def update(input_img_path, output_img_path):
image = cv2.imread(input_img_path)
print(image.shape)
cropped = image[0:800, 88:712] # 裁剪坐标为[y0:y1, x0:x1]
cv2.imwrite(output_img_path, cropped)
dataset_dir = 'cut'
output_dir = 'out'
# 获得需要转化的图片路径并生成目标路径
image_filenames = [(os.path.join(dataset_dir, x), os.path.join(output_dir, x))
for x in os.listdir(dataset_dir)]
# 转化所有图片
for path in image_filenames:
update(path[0], path[1])
运行结果:
(800, 800, 3)
(800, 800, 3)
(800, 800, 3)
(800, 800, 3)
(800, 800, 3)
效果展示:
已经成功从800*800变为624*800啦!
接下来可以去批量打标logo了!
【python】电商批量打标logo,超快速超简单!!! (点击跳转)
京东电商的主图需要800*800和624*800两种不同的尺寸(不同类目有所不同),得到的素材是一份800*800的图片,手动裁剪成624*800效率太低了,python又派上用场了!用cv2模块,可以快速将图片裁剪成所需要的大小,至于裁剪的位置嘛,需要事先计算一下。改进方向:自动按中间的位置裁剪,再升级可以改进为自动识别中心位置并进行裁剪【这次升级为批量裁剪啦!】1. 安装cv2模块pip install -i https://pypi.tuna.tsinghua.edu.c
findContours( InputOutputArray image, OutputArrayOfArrays contours,
OutputArray hierarchy, int mode,
1. 对图片的要求,比如现在处理的图片,黑色中间的图片的高度必须大于等于宽度,否则切出来的图片上下会出现部分黑色;
2. 图片名称注意中文或者中文空格会出现报错,因此尽量使用英文或数字作为图片名称;
3. 图片尺寸尽量大于规定的标准尺寸,否修改图片后,会导致图片模糊或者拉伸;
4. 如果涉及入库,还可以将图片和对应的名称进行 excel 导出,这样有利于后期批量操作。
video_caputre = cv2.VideoCapture('source.MOV') #原视频
# 获取读入视频的参数
fps = int(video_caputre.get(cv2.CAP_PROP_FPS))
size = int(video_caputre.get(cv2.CAP_PROP_FRAME_WIDTH)), int(video_caputre.get(cv2.CAP_PROP_FRAME_HEIGHT))
print(fps, size)
videoWrit
裁剪是从图像中移除所有不需要的物体或区域。甚至可以突出显示图像的特定特征。
没有使用OpenCV进行裁剪的特定函数,NumPy数组切片是做这项工作的。读取的每个图像都存储在一个2D数组中(对于每个颜色通道)。简单地指定要裁剪区域的高度和宽度(以像素为单位)。
下面的代码片段展示了如何使用Python和c++裁剪图像。在本文中,您将进一步了解这些细节。
Python
# Import packages
import cv2
import numpy as np
img = cv2.imread('test.
img=crop_image(cv2.resize(img, None, fx=1, fy=1, interpolation=cv2.INTER_CUBIC),new_height,new_width)
mini= cv2.resize(cv2.copyMakeBorder(img, P_A, P_A, P_A, P_A, cv2.BORDER_REPLICATE), (150, 150)
首先,为什么我们需要作物?裁剪是为了从图像中移除所有不需要的物体或区域或者是突出图像的一个特殊特征。
与Numpy使用切片操作实现裁剪不同,OpenCV没有特定的函数来进行裁剪操作。读取的每个图像都存储在一个2D数组中(对于每个颜色通道)。只需指定要裁剪的区域的高度和宽度(以像素为单位)即可。
1.简单版本代码实现
下面的代码片段展示了如何使用Python和c++裁剪图像。在后面的文章中,你将会更详细地了解这些。
(1)Python
# 导入相关包
import cv2
import numpy as np
import torch as t
import torchvision.transforms.functional as ff
from torch.utils.data import Dataset
from PIL import Image
import torchvision.
可以使用 Python 库 PIL (Python Imaging Library) 来实现切割大图片为小图片。
示例代码如下:
from PIL import Image
# 打开大图片
im = Image.open("big_image.jpg")
# 设置小图片的大小 (这里是 100x100)
width, height = 100, 100
# 循环切割图片
for i in r...
#–author:zhaozhao
#date:2020/08/06
功能:对图片进行定点裁剪,一张图片需要裁剪出一个矩形的话只需要两个点,左上角和右下角(point1,point2 ),并截取一部分保存
cv2的安装
cmd命令窗口下
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python
显示安装成功后输入python,再import cv2不报错则表示安装成功,若pycharm仍然显示错误,在settings的proj
im = cv2.imread("../dataset/data/Linus.png", 1)# 1表示3通道彩色,0表示单通道灰度
im_gray = cv2.imread("../dataset/data/Linus.png", 0)
cv2.imshow("test", im) # 在test窗口中显示图像
cv2.imshow("gray",im_gray)
print(type(im))
print(type(im_gray))
def resize_images(input_dir, output_dir, size):
for filename in os.listdir(input_dir):
if not filename.endswith('.jpg'):
continue
with Image.open(os.path.join(input_dir, filename)) as im:
im = im.resize(size)
im.save(os.path.join(output_dir, filename))
if __name__ == '__main__':
input_dir = 'input_images'
output_dir = 'output_images'
size = (256, 256)
resize_images(input_dir, output_dir, size)
以上代码中,`input_dir`表示输入图片所在的文件夹路径,`output_dir`表示输出图片所在的文件夹路径,`size`表示需要裁剪的尺寸大小。代码遍历`input_dir`下的所有`.jpg`文件,将其按照指定的尺寸进行裁剪,保存到`output_dir`中。需要注意的是,代码只对`.jpg`文件进行处理,如需处理其他格式文件,需要修改代码中的判断条件。
### 回答2:
编写一个Python脚本,可以批量裁剪图片大小为固定尺寸。
开发这个脚本需要使用Python的图像处理库PIL(Python Imaging Library)。首先,需要安装PIL库,可以通过运行以下命令来安装:
pip install pillow
安装完成后,可以创建一个Python脚本文件,并导入PIL库的相关模块:
```python
from PIL import Image
import os
接下来,定义一个函数来实现图片裁剪操作:
```python
def crop_images(input_dir, output_dir, width, height):
# 判断输出目录是否存在,如果不存在则创建
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 遍历输入目录下的所有图片文件
for filename in os.listdir(input_dir):
if filename.endswith(".jpg") or filename.endswith(".png"):
# 构建图片的完整路径
input_path = os.path.join(input_dir, filename)
# 打开图片
image = Image.open(input_path)
# 裁剪图片为固定尺寸
cropped_image = image.resize((width, height), Image.ANTIALIAS)
# 构建输出路径
output_path = os.path.join(output_dir, filename)
# 保存裁剪后的图片
cropped_image.save(output_path)
在这个函数中,首先判断输出目录是否存在,如果不存在则创建。然后,遍历输入目录下的所有图片文件,对每一张图片进行裁剪操作,并保存到输出目录中。
最后,调用这个函数来进行批量裁剪:
```python
input_dir = "input"
output_dir = "output"
width = 200
height = 200
crop_images(input_dir, output_dir, width, height)
在这个示例中,输入目录为"input",输出目录为"output",裁剪尺寸为200x200像素。你可以根据实际需求修改输入目录、输出目录和裁剪尺寸等参数。
这样,就完成了一个可以批量裁剪图片大小为固定尺寸的Python脚本。可以将需要裁剪的图片放在输入目录中,运行脚本后,裁剪后的图片将保存到输出目录中。
### 回答3:
用Python编写一个脚本来批量裁剪图片大小为固定尺寸可以使用PIL库(Python Imaging Library)来实现。以下是一个例子:
```python
from PIL import Image
import os
def crop_images(input_dir, output_dir, target_size):
# 遍历输入目录中的所有文件
for filename in os.listdir(input_dir):
if filename.endswith(".jpg") or filename.endswith(".png"):
# 打开图片
image_path = os.path.join(input_dir, filename)
img = Image.open(image_path)
# 裁剪图片
img.thumbnail(target_size, Image.ANTIALIAS)
# 确定输出路径并保存裁剪后的图片
output_path = os.path.join(output_dir, filename)
img.save(output_path)
print(f"已裁剪并保存图片 {filename}")
# 设置输入目录、输出目录和目标尺寸
input_dir = "input/"
output_dir = "output/"
target_size = (500, 500)
# 调用函数进行批量裁剪
crop_images(input_dir, output_dir, target_size)
在这个例子中,我们首先导入了必要的模块:PIL库和os库。然后定义了一个名为crop_images的函数来执行图片裁剪的操作。函数接受三个参数:输入目录(包含待裁剪图片的文件夹)、输出目录(用于保存裁剪后的图片的文件夹)以及目标尺寸(裁剪后的图片的大小)。
函数的主要部分是通过遍历输入目录中的所有文件,打开图片并使用thumbnail函数来裁剪。thumbnail函数采用目标尺寸和缩放方法(这里使用了Image.ANTIALIAS)作为参数。接下来,我们确定裁剪后图片的输出路径并保存图片。最后,我们通过调用函数来执行裁剪操作,并打印出每个裁剪后的图片的文件名。
你可以根据实际需求修改输入目录、输出目录和目标尺寸的值,以适应你的图片裁剪需求。