J'ai le code suivant mais pour une raison quelconque, mon code ne détecte pas les régions noires. Je pensais que le fait de fixer le seuil à 0,5 lui permettrait de se limiter aux régions noires, mais je n'y parviens pas. Ci-dessous se trouve l'image avec les zones noires et l'image avec laquelle je veux remplacer les zones noires. Comment puis-je limiter la détection des contours aux seules zones noires ? Je veux faire cela pour n'importe quelle version de ce tableau exact qui peut avoir seulement 1 colonne de cellules noircies ou 2 ou n'importe quel nombre de zones.
orig_img = cv2.imread(r'C:/Users/15127/Downloads/download (1) (1).png')
cv2.imshow('image', orig_img)
# Define the threshold for identifying blacked-out areas
thresh = 0.5
replacement_img = cv2.imread(r'C:/Users/15127/Downloads/tablereplace.png')
# Convert the original image to grayscale
gray = cv2.cvtColor(orig_img, cv2.COLOR_BGR2GRAY)
# Threshold the grayscale image to identify blacked-out areas
mask = cv2.threshold(gray, thresh, 255, cv2.THRESH_BINARY_INV)[1]
# Find contours around the blacked-out areas in the mask
contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# Loop over the contours and draw rectangles around the blacked-out areas in the original image
for contour in contours:
# Get the bounding box of the blacked-out area
x, y, w, h = cv2.boundingRect(contour)
cv2.rectangle(orig_img, (x, y), (x+w, y+h), (0, 0, 255), 2)
# Draw a red rectangle around the blacked-out area in the original image
if orig_img[y:y + h, x:x + w].shape[0] == 104 and x * w * y > 100000:
replacement_roi = cv2.resize(replacement_img, dsize=(w, h), interpolation=cv2.INTER_CUBIC)
orig_img[y:y + h, x:x + w] = replacement_roi
cv2.imshow('image', orig_img)
J'ai essayé d'utiliser le code ci-dessus pour détecter les contours mais il ne semble pas fonctionner pour se limiter aux régions noircies.