Я пытаюсь реализовать трекбар, который позволяет увеличивать и уменьшать изображение. В этом упражнении есть две трекбары: первая трекбар работает с масштабным коэффициентом, а вторая - с увеличением или уменьшением масштаба изображения. Первый трекбар, кажется, работает, так как я могу поиграть с увеличением размера изображения (scaleFactor). Однако второй трекбар не обновляет значение (scaleType) внутри функции и, следовательно, не меняет режим для уменьшения масштаба изображения.
Мне кажется, ошибка в том, что я передаю переменную в функцию поскольку документация и пример первого трекбара довольно просты.
Это код:
import cv2
maxScaleUp = 100
scaleFactor = 1
scaleType = 0
maxType = 1
windowName = "Resize Image"
trackbarValue = "Scale"
trackbarType = "Type: \n 0: Scale Up \n 1: Scale Down"
# load an image
im = cv2.imread("truth.png")
# Create a window to display results
cv2.namedWindow(windowName, cv2.WINDOW_AUTOSIZE)
# Callback functions
def scaleImage(*args):
global scaleFactor
global scaleType
if scaleType == 0:
scaleFactor = 1+ args[0]/100.0
if scaleFactor == 0:
scaleFactor = 1
scaledImage = cv2.resize(im, None, fx=scaleFactor,\
fy = scaleFactor, interpolation = cv2.INTER_LINEAR)
else:
scaleFactor = 1 - args[0]/100.0
if scaleFactor == 0:
scaleFactor = 1
scaledImage = cv2.resize(im, None, fx=scaleFactor,\
fy = scaleFactor, interpolation = cv2.INTER_LINEAR)
print(scaleType)
cv2.imshow(windowName, scaledImage)
def functionType( *args):
return 0
cv2.createTrackbar(trackbarValue, windowName, scaleFactor, maxScaleUp, scaleImage)
cv2.createTrackbar(trackbarType, windowName, scaleType, maxType, functionType)
scaleImage(25)
while True:
c = cv2.waitKey(20)
if c==27:
break
cv2.destroyAllWindows()