Я использовал пороговое значение Otsu, чтобы преобразовать изображение в градациях серого в двоичное. Но точность не очень, хочу улучшить.
импортировать cv2 из matplotlib, импортировать pyplot как plt
деф основной():
imgpath="F:\\Final_Project\\dataset\\im0001.ppm"
img=cv2.imread(imgpath)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow("Hello",img)
#grayscale
cv2.imshow('Gray image', gray)
cv2.waitKey(5000)
cv2.destroyAllWindows()
#histogram
plt.hist(gray.ravel(),256,[0,256]);
plt.show()
#otsu thresholding
blur = cv2.GaussianBlur(gray,(5,5),0)
ret3,th3 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
cv2.imshow("Otsu",th3)
cv2.waitKey(0)
cv2.destroyAllWindows()
# find otsu's threshold value with OpenCV function
thresh=-1
ret, otsu = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
print( "{} {}".format(thresh,ret) )
if name == "main": main()
это бинарное изображение, которое я получаю, используя свой код