Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV Python:使用轨迹栏模糊图像_Python_Opencv_Trackbar - Fatal编程技术网

OpenCV Python:使用轨迹栏模糊图像

OpenCV Python:使用轨迹栏模糊图像,python,opencv,trackbar,Python,Opencv,Trackbar,我想通过使用轨迹栏来控制图像的模糊。给定的MWE导入带有轨迹栏的图片,该轨迹栏设置光圈线性大小(ksize),光圈线性大小必须为1或正奇数。奇怪的是,getTrackbarPos返回一个负数,因此需要将ksize乘以-2,然后减去1。在无限循环中,图像变得模糊并显示出来 import cv2 # Callback function for trackbar def on_change(self): pass # Reads image with 0 as GRAY and 1 as

我想通过使用轨迹栏来控制图像的模糊。给定的MWE导入带有轨迹栏的图片,该轨迹栏设置光圈线性大小(
ksize
),光圈线性大小必须为1或正奇数。奇怪的是,
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()
通过运行此代码,将打开一个窗口,在输入图像的顶部显示所需的轨迹栏。滑块的起始位置为所需的位置,但通过更改滑块的位置,显示的图像不会出现模糊或任何显著变化

主要问题是为什么返回的轨迹栏位置对
medianBlur()
没有任何影响。我的第一个想法是在
while
循环或回调函数中出现错误。 除此之外,我想知道为什么
getTrackbarPos
返回负数


我正在使用Python 3.6和Anaconda 1.9.2。谢谢你的帮助

getTrackbarPos
参数需要轨迹栏的名称和窗口的名称。您正在创建名为
Blur
的轨迹栏,并读取为
ksize
,更改

ksize = cv2.getTrackbarPos('Blur', 'Image')

或者改变另一种方式(使用
createTrackbar
方法)

此外,如注释中所述,您还可以在
on_change
回调中更新
ksize


作为旁注,您还需要调整处理奇数值的方式,如果轨迹栏位置为1,则ksize最终为-3

通常您在传递给createTrackbar的回调函数中更改变量。。。但是在任何情况下,
cv2.getTrackbarPos('ksize','Image')
应该是:
cv2.getTrackbarPos('Blur','Image')
以匹配您在createTrackbar部件中提供的参数这解决了问题!我知道你的旁注,因为它只用于测试。谢谢!我很乐意帮忙!
ksize = cv2.getTrackbarPos('ksize', 'Image')