|
|
|
|
|
"""
|
|
|
Bubble Processing Module
|
|
|
========================
|
|
|
|
|
|
Processes detected text bubbles to prepare them for text replacement.
|
|
|
This module handles the cleaning and preparation of speech bubble regions
|
|
|
by removing existing text and creating a clean background.
|
|
|
|
|
|
Author: MangaTranslator Team
|
|
|
License: MIT
|
|
|
"""
|
|
|
|
|
|
import cv2
|
|
|
import numpy as np
|
|
|
|
|
|
|
|
|
def process_bubble(image):
|
|
|
"""
|
|
|
Process a speech bubble by removing existing text and creating a clean background
|
|
|
|
|
|
This function analyzes the bubble region, detects the bubble boundary,
|
|
|
and fills the interior with white color to prepare for new text insertion.
|
|
|
|
|
|
Args:
|
|
|
image (numpy.ndarray): Input image containing the speech bubble (BGR format)
|
|
|
|
|
|
Returns:
|
|
|
tuple: A tuple containing:
|
|
|
- image (numpy.ndarray): Processed image with white bubble interior
|
|
|
- largest_contour (numpy.ndarray): Contour of the detected bubble boundary
|
|
|
"""
|
|
|
|
|
|
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
|
|
|
|
|
|
|
|
|
|
|
|
_, thresh = cv2.threshold(gray, 240, 255, cv2.THRESH_BINARY)
|
|
|
|
|
|
|
|
|
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
|
|
|
|
|
|
|
|
|
largest_contour = max(contours, key=cv2.contourArea)
|
|
|
|
|
|
|
|
|
mask = np.zeros_like(gray)
|
|
|
cv2.drawContours(mask, [largest_contour], -1, 255, cv2.FILLED)
|
|
|
|
|
|
|
|
|
image[mask == 255] = (255, 255, 255)
|
|
|
|
|
|
return image, largest_contour
|
|
|
|