123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- 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()
|