使用OpenCV Python移除黑色背景并制作透明

使用OpenCV Python移除黑色背景并制作透明

在数字图像中,透明度是支持图像或图像层中的透明区域的功能。对于图像处理/图像编辑,移除背景可以帮助我们突出照片的主题,并创建一个透明的背景,将主题放入各种新设计和目的地中。

某些图像格式不支持透明度,例如TIFF、PNG和WebP图形格式支持透明度,而JPEG没有透明度。

本文中,我们将看到如何使用OpenCV Python移除图像的黑色背景并使其透明。与RGB通道类似,alpha通道用于存储透明度信息。

我们将按照以下步骤来移除黑色背景并使其透明。

方法

  • 加载图像。
  • 通过指定阈值值创建alpha通道。
  • 拆分RGB通道。
  • 合并RGB和alpha通道。
  • 最后使用合并后的通道保存图像。

本文中主要使用的函数是cv2.split()和cv2.merge()函数,它们用于拆分和合并通道。

cv2.split()函数

Python的OpenCV模块提供了一个cv2.split()函数,用于将多通道/彩色数组拆分为单独的单通道数组。它将返回一个包含三个通道的数组,每个通道对应于蓝、绿和红通道,表示为具有两个维度的ndarray。以下是此函数的语法:

cv2.split(m[, mv])

参数

  • src: 输入多通道数组。

  • mv: 输出数组或数组向量。

cv2.merge()函数

cv2.merge()函数将单通道数组合并成多通道数组/图像。此函数返回输入数组元素的连接数组。以下是该函数的语法-

cv2.merge(mv[, dst])

参数

  • mv: 要合并的矩阵的输入向量。所有的矩阵必须具有相同的大小和深度。

  • count: 必须大于零。当输入向量为普通的C数组时,指定输入矩阵的数量。

  • dst: 输出数组,具有与输入数组相同的大小和深度。

示例

在这个示例中,我们将使用一张名为“flower-black-background.jpg”的图像作为输入以去除背景。

import cv2

src = cv2.imread('Images/flower-black-background.jpg', 1)
tmp = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
_,alpha = cv2.threshold(tmp,0,255,cv2.THRESH_BINARY)

b, g, r = cv2.split(src)
rgba = [b,g,r, alpha]
dst = cv2.merge(rgba,4)

cv2.imwrite("Images/Background Transparent Image1.png", dst)

输入图像

使用OpenCV Python移除黑色背景并制作透明

输出图像

使用OpenCV Python移除黑色背景并制作透明

在输出中,我们可以看到图像文件夹中的透明图像“Background Transparent Image1.png”。由于我们的输入图像是以.jpg格式,所以我们通过添加 alpha 通道将其从 BGR 域转换为 BGRA 域。

示例

在这个示例中,我们将使用 numpy 函数移除 PNG 图像的黑色背景并使其透明。

import cv2
import numpy as np

# Load image 
na = cv2.imread('Images/WhiteDots.png')

# Make a True/False mask of pixels whose BGR values sum to more than zero
alpha = np.sum(na, axis=-1) > 0

# Convert True/False to 0/255 and change type to "uint8" to match "na"
alpha = np.uint8(alpha * 255)

# Stack new alpha layer with existing image to go from BGR to BGRA, i.e. 3 channels to 4 channels
result = np.dstack((na, alpha))

# Save result
cv2.imwrite('result_image.png', result)

输入图像

使用OpenCV Python移除黑色背景并制作透明

输出图片

使用OpenCV Python移除黑色背景并制作透明

我们已成功将黑色像素转换为透明,并保存为 .png 文件。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程