Python实现PNG图片黑色边框自动去除工具

 更新时间:2025年06月26日 09:39:07   作者:XXYBMOOO  
在日常的图像处理工作中,我们经常会遇到需要去除图片黑色边框的需求,本文将使用Python实现一个自动化的 PNG 图片黑色边框去除工具,需要的可以了解下

前言

在日常的图像处理工作中,我们经常会遇到需要去除图片黑色边框的需求。这些黑色边框可能来自扫描设备、截图工具或其他图像生成过程。手动处理大量图片既耗时又枯燥,今天我们就来实现一个自动化的 PNG 图片黑色边框去除工具。

实现思路

我们可以使用 Python 的 OpenCV 库来实现这一功能。基本思路是通过图像阈值处理找到非黑色区域的边界,然后裁剪掉黑色边框部分。对于带有透明通道的 PNG 图片,我们还可以利用 alpha 通道信息更精确地定位主体内容。

代码实现

下面是完整的实现代码:

import os
import cv2
import numpy as np

def remove_black_borders(image):
    """
    改进版的去除黑色边框函数
    """
    # 检查是否有alpha通道
    if image.shape[2] == 4:
        # 使用alpha通道作为掩码
        gray = image[:,:,3]
        _, thresh = cv2.threshold(gray, 1, 255, cv2.THRESH_BINARY)
    else:
        # 没有alpha通道,使用常规方法
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        _, thresh = cv2.threshold(gray, 10, 255, cv2.THRESH_BINARY)  # 提高阈值
    
    # 找到所有非黑色像素的坐标
    coords = np.column_stack(np.where(thresh > 0))
    
    if len(coords) == 0:
        return image
    
    # 获取边界坐标
    y_min, y_max = coords[:, 0].min(), coords[:, 0].max()
    x_min, x_max = coords[:, 1].min(), coords[:, 1].max()
    
    # 裁剪图片
    cropped = image[y_min:y_max+1, x_min:x_max+1]
    
    return cropped

def process_png_files(input_folder, output_folder):
    """
    处理文件夹中的所有PNG文件
    """
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    
    for filename in os.listdir(input_folder):
        if filename.lower().endswith('.png'):
            input_path = os.path.join(input_folder, filename)
            image = cv2.imread(input_path, cv2.IMREAD_UNCHANGED)  # 保留alpha通道
            
            if image is None:
                print(f"无法读取图片: {filename}")
                continue
            
            # 去除边框
            processed_image = remove_black_borders(image)
            
            # 保存图片
            output_path = os.path.join(output_folder, filename)
            cv2.imwrite(output_path, processed_image)
            print(f"已处理: {filename} (原始尺寸: {image.shape}, 处理后尺寸: {processed_image.shape})")


if __name__ == "__main__":
    # 输入文件夹路径(包含PNG图片的文件夹)
    input_folder = "C:\\Users\\zxc8756\\Desktop\\input_images"  # 修改为你的输入文件夹路径
    
    # 输出文件夹路径(处理后的图片将保存到这里)
    output_folder = "C:\\Users\\zxc8756\\Desktop\\output_images"  # 修改为你想要的输出文件夹路径
    
    # 处理图片
    process_png_files(input_folder, output_folder)
    
    print("所有图片处理完成!")

代码解析

1. 核心功能函数:remove_black_borders

这个函数负责检测并去除图片中的黑色边框:

  • 首先判断图片是否有 alpha 通道,如果有则使用 alpha 通道作为掩码
  • 对于没有 alpha 通道的图片,将其转换为灰度图并进行阈值处理
  • 通过找到非零像素的坐标来确定主体内容的边界
  • 最后根据边界坐标裁剪图片

2. 批量处理函数:process_png_files

这个函数用于批量处理指定文件夹中的所有 PNG 图片:

  • 创建输出文件夹(如果不存在)
  • 遍历输入文件夹中的所有 PNG 文件
  • 读取图片并调用 remove_black_borders 函数进行处理
  • 将处理后的图片保存到输出文件夹,并打印处理信息

使用方法

安装必要的库:

pip install opencv-python numpy

修改代码中的输入和输出文件夹路径:

# 输入文件夹路径(包含PNG图片的文件夹)
input_folder = "C:\\Users\\zxc8756\\Desktop\\input_images"  # 修改为你的输入文件夹路径

# 输出文件夹路径(处理后的图片将保存到这里)
output_folder = "C:\\Users\\zxc8756\\Desktop\\output_images"  # 修改为你想要的输出文件夹路径

运行脚本,等待处理完成。脚本会自动输出每张图片的处理前后尺寸信息。

应用场景

这个工具在以下场景中特别有用:

  • 处理扫描文档或图片,去除边缘的空白区域
  • 准备图标素材时,自动裁剪掉多余的空白
  • 处理批量导出的 UI 元素,确保主体内容居中且无冗余边界

总结

通过使用 Python 和 OpenCV,我们实现了一个高效的 PNG 图片黑色边框自动去除工具。这个工具不仅可以节省大量手动处理图片的时间,还能保证处理效果的一致性。你可以根据自己的需求进一步扩展这个工具,比如添加 GUI 界面、支持更多图片格式或调整裁剪算法参数等。

到此这篇关于Python实现PNG图片黑色边框自动去除工具的文章就介绍到这了,更多相关Python图片边框去除内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用numpy和pandas处理csv文件中的时间方法

    利用numpy和pandas处理csv文件中的时间方法

    下面小编就为大家分享一篇利用numpy和pandas处理csv文件中的时间方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • 基于keras 模型、结构、权重保存的实现

    基于keras 模型、结构、权重保存的实现

    今天小编就为大家分享一篇基于keras 模型、结构、权重保存的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • 基于K.image_data_format() == ''channels_first'' 的理解

    基于K.image_data_format() == ''channels_first'' 的理解

    这篇文章主要介绍了基于K.image_data_format() == 'channels_first' 的理解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python 利用flask搭建一个共享服务器的步骤

    Python 利用flask搭建一个共享服务器的步骤

    这篇文章主要介绍了Python 利用flask搭建一个共享服务器的步骤,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-12-12
  • Python+Turtle绘制幸运草的示例代码

    Python+Turtle绘制幸运草的示例代码

    幸运草又名四叶草,一般指四叶的苜蓿、或车轴草。在十万株苜蓿草中,你可能只会发现一株是四叶草,机会率大约是十万分之一。本文主要介绍运用turtle库控制函数绘制四叶草,希望见者皆好运
    2022-06-06
  • Python 网页请求之requests库的使用详解

    Python 网页请求之requests库的使用详解

    requests 是 Python 中比较常用的网页请求库,主要用来发送 HTTP 请求,在使用爬虫或测试服务器响应数据时经常会用到,使用起来十分简洁,这篇文章主要介绍了Python 网页请求之requests库的使用详解,需要的朋友可以参考下
    2022-09-09
  • python脚本使用阿里云slb对恶意攻击进行封堵的实现

    python脚本使用阿里云slb对恶意攻击进行封堵的实现

    这篇文章主要介绍了python脚本使用阿里云slb对恶意攻击进行封堵的实现,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • MacbookM1 python环境配置随笔

    MacbookM1 python环境配置随笔

    这篇文章主要介绍了MacbookM1 python环境配置随笔,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • python3+PyQt5自定义视图详解

    python3+PyQt5自定义视图详解

    这篇文章主要为大家详细介绍了python3+PyQt5自定义视图的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • 基于python实现的百度新歌榜、热歌榜下载器(附代码)

    基于python实现的百度新歌榜、热歌榜下载器(附代码)

    这篇文章主要介绍了基于python实现的百度新歌榜、热歌榜下载器(附代码),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08

最新评论