关键词

Python快速实现一键抠图功能的全过程

下面是关于“Python快速实现一键抠图功能的全过程”的完整攻略,本攻略以Windows系统为例:

1. 安装软件和库

首先要安装一个图像处理库——OpenCV,可以从官网下载:https://opencv.org/releases/。下载完成后,按照官方文档中的步骤安装即可。

另外还需要安装Pillow库,它是Python Imaging Library(PIL)的一个替代品,提供了更好的支持PNG和JPG等格式的图像。使用以下命令进行安装:

pip install pillow

2. 编写代码

代码分为以下几个步骤:

  1. 调用OpenCV读取原始图片,并将其转换为HSV格式:
import cv2
img = cv2.imread('original_img.png')
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
  1. 获取图片中的绿色区域:
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)
  1. 将图片中的白色区域变成透明色,并保存结果:
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')

3. 示例说明

示例1:一键抠图

我们可以将上面的代码封装成一个函数,用户只需要提供原始图片的路径,即可得到抠出来的图片:

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"

即可得到抠出来的图片。

示例2:一键批量抠图

如果有多张图片需要抠图,可以使用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

展开阅读全文