from skimage.filters import threshold_otsu
from skimage.measure import label, regionprops
from skimage.morphology import binary_closing, binary_dilation, binary_erosion, binary_opening
import matplotlib.pyplot as plt
import pathlib


def binary_append(image, func, times: int = 1):
    result = image[:]
    for _ in range(times):
        result = func(result)
    return result

all_pencils = 0

for index in range(1, 12):
    image = plt.imread(f'pencils/images/img ({index}).jpg').mean(axis=2)

    thrashold = threshold_otsu(image)

    image[image < thrashold] = 1
    image[image > thrashold] = 0

    # Большой closing
    result = binary_append(image, binary_dilation, 25)
    result = binary_append(result, binary_erosion, 25)

    pen_count = 0
    labeled = label(result)
    regions = regionprops(labeled)
    for region in regions:
        min_row, min_col, max_row, max_col = region.bbox
        width = max_col - min_col
        height = max_row - min_row
        if (width / result.shape[1] > 0.4 or height / result.shape[0] > 0.4) and \
        not (max_row == result.shape[0] or max_col == result.shape[1]):
            pen_count += 1

    plt.subplot(3,4,index)
    plt.title(f'{pen_count} карандашей')
    plt.imshow(labeled)
    
    all_pencils += pen_count

plt.show()