我想通过使用轨迹条来控制图像的模糊程度。给定的MWE导入了一张图片,其中包含一个设置光圈线性大小(ksize
)的轨迹条,它必须是正数或奇数。奇怪的是,getTrackbarPos
返回一个负数,这使得需要将ksize
乘以-2并减去1。在无限循环内,图像被模糊并显示。
import cv2
# Callback function for trackbar
def on_change(self):
pass
# Reads image with 0 as GRAY and 1 as BGR
img = cv2.imread('example.JPG', 0)
# Creates window
cv2.namedWindow('Image')
# Creates Trackbar with slider position and callback function
low_k = 1 # slider start position
high_k = 21 # maximal slider position
cv2.createTrackbar('Blur', 'Image', low_k, high_k, on_change)
# Infinite loop
while(True):
ksize = cv2.getTrackbarPos('ksize', 'Image') # returns trackbar position
ksize = -2*ksize-1 # medianBlur allows only odd ksize values
# Blures input image
median = cv2.medianBlur(img, ksize) # source, kernel size
cv2.imshow('Image', median) # displays image 'median' in window
k = cv2.waitKey(1) & 0xFF
if k == 27:
break
cv2.destroyAllWindows()
通过运行此代码,会打开一个窗口,在输入图像上方显示所需的轨道栏。滑块的起始位置是1,但通过改变滑块的位置,显示的图像没有模糊或任何明显的变化。
主要问题是为什么返回的轨道栏位置没有影响
medianBlur()
。我的第一个想法是在while
循环或回调函数内出现了错误。
此外,我想知道为什么getTrackbarPos
返回负数。我正在使用Python 3.6和Anaconda 1.9.2。谢谢您的帮助!
cv2.getTrackbarPos('ksize', 'Image')
应该是:cv2.getTrackbarPos('Blur', 'Image')
,以匹配您在createTrackbar部分提供的参数。 - api55