pytohn用Pillow或OpenCV删除图片某种颜色

实际对图片进行处理的时候,经常会碰到单一颜色背景的情况,这时候就可以采用图像处理的方法,将该单一颜色去除,形成一个透明的图片。如果需要,还可以加上新的背景图,图片就焕然一新了。

删除图片某种颜色,Pillow或OpenCV都可以实现。实现的思路都是一致的,就是将图片转换为带透明通道的格式,然后设置透明度为0。

Pillow库的实现,采用image.convert('RGBA'),然后查找相应的颜色,最后设置透明通道为0

OpenCV库的实现,采用cv2.cvtColor(img1, cv2.COLOR_BGR2BGRA),然后查找相应的颜色,最后设置透明通道为0。

以下是实现的效果,图一是原图,图二是pillow去除背景后的图,图三是OpenCV支除背景后的图。刚好去除的背景颜色为(237,237,237)。

在代码运行过程中,发现用pillow的实现速度,要比OpenCV要快速很多,比较建议使用。下面是图片与实现代码。

 

import cv2
from PIL import Image

def calc_diff(pixel, bg_color):
    #     计算pixel与背景的离差平方和,作为当前像素点与背景相似程度的度量
    return (pixel[0] - bg_color[0]) ** 2 + (pixel[1] - bg_color[1]) ** 2 + (pixel[2] - bg_color[2]) ** 2


def remove_one_color_opencv():  # 采用opencv方式
    delete_color = [237, 237, 237]
    threshold = 13
    image_path = "example3.png"
    img1 = cv2.imread(image_path)
    img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2BGRA)  # 将图像转成带透明通道的BGRA格式
    for i in range(img1.shape[0]):
        for j in range(img1.shape[1]):
            if calc_diff(img1[i][j], delete_color) < threshold:
                img1[i][j] = (255, 255, 255, 0)
    cv2.imwrite("output2.png", img1)


def remove_one_color_pillow():  # 采用pillow方式
    delete_color = [237, 237, 237]
    threshold = 13
    image_path = "example3.png"
    img2 = Image.open(image_path)
    img2 = img2.convert('RGBA')
    pixdata = img2.load()
    for y in range(img2.size[1]):
        for x in range(img2.size[0]):
            if calc_diff(pixdata[x, y], delete_color) < threshold:
                pixdata[x, y] = (255, 255, 255, 0)
    img2.save("output1.png")


if __name__ == '__main__':
    remove_one_color_pillow()
    remove_one_color_opencv()

                
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值