下面是关于“Python快速实现一键抠图功能的全过程”的完整攻略,本攻略以Windows系统为例:
首先要安装一个图像处理库——OpenCV,可以从官网下载:https://opencv.org/releases/。下载完成后,按照官方文档中的步骤安装即可。
另外还需要安装Pillow库,它是Python Imaging Library(PIL)的一个替代品,提供了更好的支持PNG和JPG等格式的图像。使用以下命令进行安装:
pip install pillow
代码分为以下几个步骤:
import cv2
img = cv2.imread('original_img.png')
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
import numpy as np
# 定义HSV中的绿色区域,这里的值可以根据实际情况进行调整
lower_green = np.array([35, 43, 46])
upper_green = np.array([77, 255, 255])
# 将图片中绿色区域变成白色,其他区域变成黑色
mask = cv2.inRange(img_hsv, lower_green, upper_green)
from PIL import Image
# 将mask变成RGBA格式
mask_rgb = cv2.cvtColor(mask, cv2.COLOR_GRAY2RGB)
mask_rgba = np.concatenate((mask_rgb, mask), axis=2)
# 使用Pillow库读取原始图片和mask图片,并将原始图片转换成RGBA格式
img_rgba = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGBA))
mask_rgba = Image.fromarray(mask_rgba)
# 使用Pillow库的alpha_composite函数将原始图片和mask图片进行合成
result_img = Image.alpha_composite(img_rgba, mask_rgba)
# 保存结果图片
result_img.save('result.png')
我们可以将上面的代码封装成一个函数,用户只需要提供原始图片的路径,即可得到抠出来的图片:
def get_cutout_img(img_path):
img = cv2.imread(img_path)
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_green = np.array([35, 43, 46])
upper_green = np.array([77, 255, 255])
mask = cv2.inRange(img_hsv, lower_green, upper_green)
mask_rgb = cv2.cvtColor(mask, cv2.COLOR_GRAY2RGB)
mask_rgba = np.concatenate((mask_rgb, mask), axis=2)
img_rgba = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGBA))
mask_rgba = Image.fromarray(mask_rgba)
result_img = Image.alpha_composite(img_rgba, mask_rgba)
result_img.save('cutout_img.png')
用户只需要将上面的代码放到一个.py文件中,然后在命令行中运行:
python cutout_img.py "original_img.png"
即可得到抠出来的图片。
如果有多张图片需要抠图,可以使用os库中的相关函数来遍历文件夹中的所有图片。修改上面的代码,将其封装成一个函数,并将路径参数改成文件夹的路径,即可实现一键批量抠图。
import os
def batch_get_cutout_imgs(dir_path):
for filename in os.listdir(dir_path):
if filename.endswith('.png') or filename.endswith('.jpg'):
img_path = os.path.join(dir_path, filename)
get_cutout_img(img_path)
用户只需要将上面的代码放到一个.py文件中,然后在命令行中运行:
python batch_cutout_img.py "dir_path"
即可将指定文件夹下的所有图片都进行抠图,抠出来的结果保存在同一文件夹下的cutout_img文件夹内。
本文链接:http://task.lmcjl.com/news/16945.html