Применение адаптивной пороговой обработки при обнаружении границ Canny

Я хочу удалить размытый фон изображений в своем наборе данных проекта, и я уже получил довольно хорошее решение в здесь с помощью обнаружения границ Canny. Я хочу применить адаптивное пороговое значение к требованиям Canny к двойному пороговому значению. Я ценю любую помощь в этом.

imageNames = glob.glob(r"C:\Users\Bikir\Pictures\rTest\*.jpg")
count=0
for i in imageNames:        
 
    img = Image.open(i)
    img = np.array(img)    

    # grayscale
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    # canny - I want this two values (0 and 150) to be adaptive in this case      
    canned = cv2.Canny(gray, 0, 150)

    # dilate to close holes in lines
    kernel = np.ones((3,3),np.uint8)
    mask = cv2.dilate(canned, kernel, iterations = 1);

    # find contours
    # Opencv 3.4, if using a different major version (4.0 or 2.0), remove the first underscore
    _, contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE);

    # find the biggest contour
    biggest_cntr = None;
    biggest_area = 0;
    for contour in contours:
        area = cv2.contourArea(contour);
        if area > biggest_area:
            biggest_area = area;
            biggest_cntr = contour;

    # draw contours
    crop_mask = np.zeros_like(mask);
    cv2.drawContours(crop_mask, [biggest_cntr], -1, (255), -1);

    # opening + median blur to smooth jaggies
    crop_mask = cv2.erode(crop_mask, kernel, iterations = 5);
    crop_mask = cv2.dilate(crop_mask, kernel, iterations = 5);
    crop_mask = cv2.medianBlur(crop_mask, 21);

    # crop image
    crop = np.zeros_like(img);
    crop[crop_mask == 255] = img[crop_mask == 255];    

    img = im.fromarray(crop)
    img.save(r"C:\Users\Bikir\Pictures\removed\\"+str(count)+".jpg") 

    count+=1

person Bikir    schedule 11.02.2021    source источник
comment
Просто спрашиваю, когда вы находите контуры, как найти область изображения, покрытую краями?   -  person user14578710    schedule 04.03.2021