'''
adaptive threshold segmentation:for one picture, the brightness of foreground and background may be different,
it is difficult for single threshold to segment the picture well, adaptive threshold select many thresholds
for different subarea to get better performance
'''
import cv2
import numpy as np
from matplotlib import pyplot as plt
def adaptive_threshold_seg(args):
block_size = cv2.getTrackbarPos(trackbar_name1, winname)
block_size = block_size*2+1
bias = cv2.getTrackbarPos(trackbar_name2, winname)
cimg = cv2.medianBlur(img, 5)
th2 = cv2.adaptiveThreshold(cimg, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, block_size, bias)
# th3 = cv2.adaptiveThreshold(cimg, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, block_size, bias)
cv2.imshow(winname, th2)
if __name__ == '__main__':
winname = 'adaptive_threshold_seg'
trackbar_name1 = 'block_size'
trackbar_name2 = 'bias'
img = cv2.imread('./img_1200.png', 0)
cv2.imshow('img', img)
cv2.namedWindow(winname)
cv2.createTrackbar(trackbar_name1, winname, 1, 300, adaptive_threshold_seg)
cv2.createTrackbar(trackbar_name2, winname, 0, 5, adaptive_threshold_seg)
adaptive_threshold_seg(0)
if cv2.waitKey(0) == 27:
cv2.destroyAllWindows()