Проблема при сохранении PNG в JPG в OpenCV

Это классическая проблема. Верните выделенный узел или используйте указатель указателя. В C вы должны передать указатель на X в функцию, в которой вы хотите, чтобы ваш X был изменен. В этом случае, поскольку вы хотите, чтобы указатель был изменен, вы должны передать указатель на указатель.

0
задан Shawn Mathew 19 March 2019 в 19:45
поделиться

1 ответ

Как уже упоминалось в комментариях, простое удаление альфа-канала не приводит к удалению фона в этом случае, поскольку на канале BGR есть артефакт, который вы пытаетесь удалить, как показано ниже, когда вы строите только график каналов B, G или R .

B channel

И ваш альфа-канал выглядит так

alpha channel

[ 1112] Чтобы достичь того, что вам нужно, вам нужно применить некоторую матричную математику, чтобы получить свой результат. Я приложил код здесь

import cv2
import matplotlib.pyplot as plt

img_path = r"path/to/image"

#saving image into a white bg
img = cv2.imread(img_path, cv2.IMREAD_UNCHANGED)
plt.imshow(img)
plt.show()
b,g,r, a = cv2.split(img)
print(img.shape)

new_img  = cv2.merge((b, g, r))
not_a = cv2.bitwise_not(a)
not_a = cv2.cvtColor(not_a, cv2.COLOR_GRAY2BGR)
plt.imshow(not_a)
plt.show()
new_img = cv2.bitwise_and(new_img,new_img,mask = a)
new_img = cv2.add(new_img, not_a)

cv2.imwrite(output_dir, new_img)
plt.imshow(new_img)
print(new_img.shape)
plt.show()

В результате получилось изображение с размерами (1200, 1200, 3)

enter image description here

0
ответ дан Shawn Mathew 19 March 2019 в 19:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: