simple thresholding with OpenCV
import cv2 from matplotlib import pyplot as plt '''Read your image and convert it to graycale as follows:''' img = cv2.imread("myimage.jpg") gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) '''Apply a Low-pass filter such as guassian blur to reduce high frequency components as follows:''' img_blur = cv2.GaussianBlur(gray, (3,3), 0) '''The (3,3) is filter size (must be odd) and zero is the standard deviation parameter of a guassian function which tells GaussianBlur to calculate standard diviation automatically. Assuming myimage.jpg is of a bi-modal distribution (its histogram plot contains two peaks) then threshold is applied as follows:''' threshdimage = cv2.threshold(img_blur,100,255,cv2.THRESH_BINARY)[1] plt.imshow(threshdimage, cmap = 'gray', interpolation = 'bicubic')# plot plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis '''Where 100 is threshold that divides the pixel space , hence all pixel values smaller than 100 are set to 0 and all above 100 are set to 255. The THRESH_BINARY specifies method used for thresholding. See the following: https://docs.opencv.org/4.x/d7/d4d/tutorial_py_thresholding.html for more info''' plt.show()
Source: pyimagesearch.com