Я пытаюсь создать скрипт для подсчета точек на изображении (очень оригинальный), используя Python и OpenCV.
import numpy as np
import cv2
# Image read
img = cv2.imread("img.tif", 0)
# Denoising
denoisedImg = cv2.fastNlMeansDenoising(img);
# Threshold (binary image)
# thresh – threshold value.
# maxval – maximum value to use with the THRESH_BINARY and THRESH_BINARY_INV thresholding types.
# type – thresholding type
th, threshedImg = cv2.threshold(denoisedImg, 100, 255,cv2.THRESH_BINARY_INV|cv2.THRESH_OTSU) # src, thresh, maxval, type
# Perform morphological transformations using an erosion and dilation as basic operations
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (4,8))
morphImg = cv2.morphologyEx(threshedImg, cv2.MORPH_CLOSE, kernel)
# Find and draw contours
contours, hierarchy = cv2.findContours(morphImg, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contoursImg = cv2.cvtColor(morphImg, cv2.COLOR_GRAY2RGB)
cv2.drawContours(contoursImg, contours, -1, (255,100,0), 3)
cv2.imwrite("image.tif", contoursImg)
print("Dots number: {}".format(len(contours)))
На левом изображении результат, которого я достиг, используя код выше , На правом изображении то, чего я хочу достичь.
Как видите, я ищу способ разбить точки, которые немного связаны, на две отдельные точки, и мне было интересно, есть ли была «магическая» функция, позволяющая мне сделать это.
Заранее спасибо за вашу помощь.