Не делайте изображение черным при условном удалении фона с помощью OpenCVPython

Программы на Python
Ответить
Anonymous
 Не делайте изображение черным при условном удалении фона с помощью OpenCV

Сообщение Anonymous »

Описание проблемы:
Я работаю над сценарием Python для удаления фона из изображений с помощью OpenCV. Цель состоит в том, чтобы:
Проверить, требуется ли удаление фона (для изображений с простым или однородным фоном следует пропустить процесс удаления).
Применять удаление фона только при необходимости, и сохраните полученное изображение с прозрачностью.
В настоящее время, когда я применяю удаление фона к изображениям, которые в этом не нуждаются (например, с простым фоном), изображение становится черным вместо того, чтобы сохранять свой первоначальный вид.
Что у меня есть Пробовал:
Проверяю, нужно ли удаление фона, вычисляя дисперсию интенсивностей пикселей. Если дисперсия невелика, я предполагаю, что фон однородный и удаление фона не требуется.
Для изображений со сложным фоном я применяю пороговую маску для создания прозрачности с помощью OpenCV.
Вот мой текущий код:

Код: Выделить всё

import cv2
import numpy as np

# Function to check if background removal is needed
def is_background_removal_needed(image_path):
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
if image is None:
raise FileNotFoundError(f"Image not found: {image_path}")

variance = np.var(image)
print(f"Image variance: {variance:.2f}")
return variance > 100  # Threshold for variance

# Function to remove background and save transparent image
def remove_background(image_path, output_path):
image = cv2.imread(image_path)
if image is None:
raise FileNotFoundError(f"Image not found: {image_path}")

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
_, mask = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY_INV)

# Add transparency
result = cv2.cvtColor(image, cv2.COLOR_BGR2BGRA)
result[:, :, 3] = mask  # Alpha channel

cv2.imwrite(output_path, result)
print(f"Background removed and saved to: {output_path}")

# Main process function
def process_image(image_path, output_path):
if is_background_removal_needed(image_path):
print("Background removal is needed. Processing...")
remove_background(image_path, output_path)
else:
print("Background removal is NOT needed. Saving the original image.")
image = cv2.imread(image_path)
cv2.imwrite(output_path, image)
print(f"Original image saved to: {output_path}")

# Input and output paths
input_image = "example.jpg"  # Path to input image
output_image = "output_image.png"

# Run the process
process_image(input_image, output_image)
Проблема:
Когда я запускаю этот скрипт на изображении с простым или однородным фоном (например, удостоверение личности), выходное изображение иногда становится черным после применения фона процесс удаления. Однако я хочу, чтобы сценарий:
обнаруживал, что изображение не требует удаления фона.
сохранял исходное изображение без изменений, если обработка не требуется.
Вопросы :
Почему в некоторых случаях изображение становится черным, когда применяется удаление фона?
Как правильно пропустить удаление фона для простых изображений и сохранить исходное изображение, не изменяя его?
Будем очень признательны за любые идеи или предложения по улучшению этого сценария. Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/792 ... ing-opencv
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»