添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

删除图片某种颜色,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()
				
最近在使用OpenCV写毕业设计,接触图像编程不久。学习时也遇到一些困惑,在此与大家分享一下。 OpenCV分离RGB颜色通道。示例图:分离出来的效果图如下:程序源代码:#include "cv.h"' #include "cxcore.h" #include "highgui.h" #include using namespace std; int main () IplImage*
在图像处理时,我们接触到的彩色以RGB居多,为了分析图像在某一通道上的特性,需要将图像的颜色通道进行分离,或者是在对某一颜色通道处理后重新进行融合。opencv提供了split()函数来进行颜色通道的分离,提供了merge()函数来进行颜色通道的融合。1.split()函数 颜色通道分离函数,其定义如下所示:CV_EXPORTS void split(const Mat& src, Mat* mv
opencv去除图片中某一颜色python实现) 一 打开图片 ​ 打开图片的时候最好使用windows自带的“画图”软件查看(在画图软件下通过句柄精灵获得点的RGB值与opencv中获得的是一样的),在“画图”的左下角可以看到图像中某个点的坐标值如(344,123),如果要在opencv中处理该点的话,需要把坐标值反一下即 img[123, 344]才能取得该点 二 使用句柄精灵等软件获得想要改变的颜色的RGB值 ​ 需要注意的是opencv中的R与B通道是反着的(后面代码中有相应说明) def Resize_Pil(img_file_name): imgFile = Image.open(img_file_name) print (imgFile.size) # (828, 1471) newImg = imgFile.resize((1080, 1080), Image.B
利用python实现图片的横向和纵向拼接,实现起来主要有PillowOpenCV两个方法。两个代码略有不同,实现起来也还算简单。主要知识点是: Pillow实现:主要采用crop,实现图片截取、采用paste,实现图片拼接。 OpenCV实现:截取直接[],截取需要的区域,采用np.vstack, np.hstack实现纵向,横向拼接。或者np.concatenate实现,通过axis来控制横向纵向。 实现代码如下: import cv2 import numpy as np from PIL.
这段代码是一个图像处理程序,它遍历指定目录中的所有PNG图像文件,并将其中的红色和绿色像素替换为白色,将蓝色像素增加。它使用了OpenCVPillow和NumPy库来处理图像。 代码首先设置了包含图像的目录路径和输出目录路径,然后获取目录中所有PNG图像文件的列表。接下来,定义了要替换的颜色及其容差,包括红色、绿色和蓝色。然后,遍历每个图像文件,打开图像文件并将其转换为RGB格式。然后,将图像转换为NumPy数组,并将红色和绿色像素替换为白色,将蓝色像素增加。最后,从像素数组创建新图像,并将