使用 cv2.adaptiveThreshold 和 cv2.createTrackbar
# %% todo: 使用 cv2.adaptiveThreshold 和 cv2.createTrackbar
# ==============================================================================
import cv2
import numpy as np# 新建一个窗口
cv2.namedWindow('img', cv2.WINDOW_NORMAL) # 可调整窗口大小
cv2.resizeWindow("img", 800, 800) # 设置窗口的大小# 滑动条从0开始,为了使用特定的数值,采用数组和序号的方式。
adaptiveMethods_i = 0
adaptiveMethods = [cv2.ADAPTIVE_THRESH_MEAN_C, cv2.ADAPTIVE_THRESH_GAUSSIAN_C]thresholdType_i = 0
thresholdTypes = [cv2.THRESH_BINARY, cv2.THRESH_BINARY_INV]blockSize_i = 0
blockSizes = range(3, 100, 2)c_i = 0
cs = range(-4, 4)imgGray2 = cv2.imread(r"E:\Testwork\imgGray2.bmp", cv2.IMREAD_GRAYSCALE)
imgBin = cv2.adaptiveThreshold(imgGray2, 255, adaptiveMethods[adaptiveMethods_i],thresholdTypes[thresholdType_i], blockSizes[blockSize_i], cs[c_i],)flag = 0 # 为了滑动一次,只显示一次滑动结果
def noting(x):# 拖动滑动条,cv2.getTrackbarPos 的回调函数不能获得滑动后的位置,只能使用上次的位置。# print(f'{adaptiveMethods_i:3d} {thresholdType_i:3d} {blockSizes[blockSize_i]:3d} {cs[c_i]}')global flag # 设置成全局变量flag = 1cv2.createTrackbar('adaptiveMethods_i', 'img', 0, 1, noting)
cv2.createTrackbar('thresholdType_i', 'img', 0, 1, noting)
cv2.createTrackbar('blockSize_i', 'img', 0, len(blockSizes)-1, noting)
cv2.createTrackbar('c', 'img', 0, len(cs)-1, noting)while 1:cv2.imshow('img', imgBin)adaptiveMethods_i = cv2.getTrackbarPos('adaptiveMethods_i', 'img')thresholdType_i = cv2.getTrackbarPos('thresholdType_i', 'img')blockSize_i = cv2.getTrackbarPos('blockSize_i', 'img',)c_i = cv2.getTrackbarPos('c', 'img',)imgBin = cv2.adaptiveThreshold(imgGray2, 255, adaptiveMethods[adaptiveMethods_i],thresholdTypes[thresholdType_i], blockSizes[blockSize_i], cs[c_i], )if flag == 1: # 为了滑动一次,只显示一次滑动结果print(f'{adaptiveMethods_i:3d} {thresholdType_i:3d} {blockSizes[blockSize_i]:3d} {cs[c_i]}')flag = 0if cv2.waitKey(1) == ord('q'):breakcv2.destroyAllWindows()