【问题标题】:How to remove a black background from an image and make that transparent using opencv?如何从图像中删除黑色背景并使用opencv使其透明?
【发布时间】:2017-02-27 17:12:04
【问题描述】:

我正在使用“PerspectiveTransform”方法来转换给定矩形中的图像。方法“warpPerspective”工作正常,但输出包含黑色背景,我想删除黑色并使其透明。

import cv2
import numpy as np

img2 = cv2.imread(r"C:\Users\test\Desktop\map.jpg")
input_quad = np.float32([[0,0],[1024,0],[1024,752],[0,752]])
output_quad = np.float32([[4,139],[500,137],[500,650],[159,636]])
lambda_img = np.zeros((728, 992,3), np.uint8)
lambda_img[:,:,:] = 255
lambda_val = cv2.getPerspectiveTransform( input_quad, output_quad )
dst = cv2.warpPerspective(img2,lambda_val,(992,728),lambda_img, cv2.INTER_CUBIC, borderMode=cv2.BORDER_TRANSPARENT)
cv2.imwrite("Valchanged.png",dst)

[enter image description here][1]
[![enter image description here][2]][2]

下面是我恢复的输出。

【问题讨论】:

    标签: python opencv


    【解决方案1】:

    由于您的输入图像是.jpg 格式,因此您需要将输入图像从BGR 域转换为BGRA 域:

    img2 = cv2.imread(r"C:\Users\test\Desktop\map.jpg")
    img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2BGRA)
    

    此外,您不需要在您身边定义新的lambda_imgcv2.warpPerspective 在应用转换后返回一个 numpy 数组。

    dst = cv2.warpPerspective(img2, lambda_val, (992,728), flags = cv2.INTER_CUBIC, borderMode=cv2.BORDER_CONSTANT, borderValue = [0, 0, 0, 0])
    

    当您定义borderMode=cv2.BORDER_CONSTANT 时,您还需要定义一个沿边界填充的borderValue,在这种情况下,它是黑色,alpha 值为 0,即透明或"#00000000"

    【讨论】:

      猜你喜欢
      • 2011-12-23
      • 2011-12-06
      • 2017-05-22
      • 1970-01-01
      • 2020-01-13
      • 1970-01-01
      • 1970-01-01
      • 2016-06-24
      • 1970-01-01
      相关资源
      最近更新 更多