当前位置: 首页 > article >正文

不玩PS抠图了,改玩Python抠图

网上找了两个苏轼的印章图片:

把这两个印章抠出来的话,对于不少PS高手来说是相当容易,但是要去掉其中的水印,可能要用仿制图章慢慢描绘,图章的边缘也要慢慢勾画或者用通道抠图之类来处理,而且印章的红色也不是很鲜亮,调整颜色也有点麻烦。弄个下面的Python程序,那就秒杀。

import random

import cv2

def remove_background(image_path, red_threshold):
    """
    将图片中红色分量低于指定值的点全部变成透明

    :param image_path: 图片的路径
    :param red_threshold: 红色分量的阈值
    :return: 处理后的透明背景红色增强图片(numpy.ndarray类型)
    """
    # 读取图片
    image = cv2.imread(image_path)
    image_rgba = cv2.cvtColor(image, cv2.COLOR_BGR2RGBA)

    # 获取图片的高度、宽度和通道数
    height, width, channels = image.shape

    # 遍历图片中的每个像素点
    for i in range(height):
        for j in range(width):
            # 获取当前像素点的红色分量值
            red_value = image[i][j][2]

            # 如果红色分量值低于阈值,将该像素点变为透明
            if red_value < red_threshold:
                image_rgba[i][j] = [0, 0, 0, 0]
            else:
                # 考虑到现实中的红色未必都是纯红,生成一种随机的比较鲜艳的红色填充红色区域。这样水印自然消掉了
                red_value = random.randint(248, 255)
                green_value = random.randint(0, 8)
                blue_value = random.randint(0, 5)
                image_rgba[i][j] = [blue_value, green_value, red_value, 255]

    return image_rgba

if __name__ == '__main__':
    file_path = 'meiyang.jpg'
    image = remove_background(file_path, red_threshold=127)
    cv2.imwrite('meiyang.png', image)
    cv2.imshow('image', image)

    cv2.waitKey(0)
    cv2.destroyAllWindows()

抠图效果展示(右下角CSDN添加的水印别怪我,看不出透明背景别怪我):

其实只要前景色中没有混杂背景色,如果前景色和背景色差异较大或者转换为灰度图片后前景色与背景色灰度值相差明显,就可以稍微修改一下上面的代码将背景改成透明的,从而完成抠图。背景色不是纯黑纯白时可传入红绿蓝三个分量的阈值,转换为灰度图片后前景色与背景色灰度值相差明显时可先转换成灰度图片后二值化作为掩码图片,利用掩码图片消除原始图片上的背景。

话说苏东坡是白字先生,“士”字多刻了两笔🐶。


http://www.kler.cn/a/417995.html

相关文章:

  • Ubuntu 服务器部署 Tomcat 并配置 SSL/TLS 证书
  • ESP8266 (ESP-01S)烧录固件 和 了解与单片机通信必需的AT指令
  • 网络安全防护指南:筑牢网络安全防线(5/10)
  • ros sensor_msgs::Imu详细介绍 Eigen::Vector3d 详细介绍
  • 【HarmonyOS学习日志(11)】计算机网络之概念,组成和功能
  • [CTF/网络安全] 攻防世界 upload1 解题详析
  • QT实战--qt各种按钮实现
  • yagmail邮件发送库:如何用Python实现自动化邮件营销?
  • boss上测试面试宝典总结
  • 【MySQL】Win10同时安装MySQL8 MySQL5.7教程
  • VS与SQL Sever(C语言操作数据库)
  • Scala模式匹配——高阶用法
  • Python 和 Pyecharts 对Taptap相关数据可视化分析
  • SQL优化与性能——数据库设计优化
  • 走进科学json版:在 JSON 格式中,字符串值必须使用双引号 “ 来界定,而不能使用单引号 ‘
  • 【Python网络爬虫笔记】5-(Request 带参数的get请求) 爬取豆瓣电影排行信息
  • 洛谷 P2415 集合求和 C语言
  • 学习日志017--python的几种排序算法
  • 根据导数的定义计算导函数
  • 数据库学习记录02
  • 学习嵩山版《Java 开发手册》:编程规约 - 命名风格(P13 ~ P14)
  • 【操作系统不挂科】<内存管理-分页与分段(15)>选择题&简答题(带答案与解析)
  • C#运动控制技术详解:基础、实现与应用实例
  • 【S500无人机】--地面端下载
  • 大数据HCIA笔记1
  • Android11修改摄像头前后置方法,触觉智能RK3568开发板演示