Smoothing white background in an Image

Hello ,

i’m pretty new to OpenCV and i have to do some work for it for uni. My issue is to make the Backgroud perfectly white (who is already white but has some stains). for this i used this code:

import cv2
import numpy as np

image = cv2.imread('./MCP_tmp_picam_final.jpg')
original = image.copy()

gray = cv2.cvtColor(original, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (3,3), 0)
thresh = cv2.adaptiveThreshold(blur,225,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV,21,2)

# Draw largest enclosing circle onto a mask
mask = np.zeros(original.shape[:2], dtype=np.uint8)
cnts,_ = cv2.findContours(thresh, cv2.RETR_TREE,

for i, c in enumerate(cnts):
    area = cv2.contourArea(c)
    # Ignore contours that are too small or too large
    if area < 1000 or 100000 < area: #100000
    rect = cv2.minAreaRect(c)
    box = cv2.boxPoints(rect)
    box = np.int0(box)
    cv2.drawContours(mask, [box], 0, (255,255,255), 2)

# Bitwise-and for result
result = cv2.bitwise_and(original, original, mask=mask)
result[mask==0] = (255,255,255)

cv2.imshow('thresh', thresh)
cv2.imshow('result', result)
cv2.imshow('mask', mask)
cv2.imshow('image', image)

this is the original image i used:

the result i got is just the boundingbox of my object drawn in black (sorry i couldn’t upload the image because i’m a new member)

it would be great if someone can help me with it. thank you.

ps: i’m using the result Image in a matching algorithm but this should be next step