【问题标题】:Use cv2.createTrackbar to blur images using python使用 cv2.createTrackbar 使用 python 模糊图像
【发布时间】:2021-08-29 22:02:35
【问题描述】:

我尝试了以下代码:

import cv2
import numpy as np

   
def nothing(x):
  pass

cv2.namedWindow('Image')
img = cv2.imread("kakashi.jpg")

low = 1
high = 100

cv2.createTrackbar('Blur', 'Image',low,high,nothing)
while (True):
    ksize = cv2.getTrackbarPos('ksize', 'Image')
    ksize = -2*ksize-1
    image = cv2.medianBlur(img,ksize)
    
    cv2.imshow('Image', image)
    k = cv2.waitKey(1) & 0xFF
    if k == 27:
        break

cv2.destroyAllWindows()

通过更改滑块的位置,不会对图像产生任何影响。我无法解决这个问题。我想我缺少一些东西!请帮忙!

【问题讨论】:

  • 如果 ksize 为正,您的 medianBlur 过滤器大小始终为负。您的意思是使用 +2*ksize-1 而不是 -2*ksize-1?
  • 我不这么认为。它必须是负面的。这是参考stackoverflow.com/questions/53152665/…
  • “参考”有同样的错误。
  • 好的。谢谢,我不知道。很抱歉质疑它。我没有使用 getTrackbarPos() 并且负值对我来说似乎很奇怪。检查在 medianBlur 中使用的 ksize 值是否符合您的预期。检查看看 while(True) 实际上是 True。您是否确实验证了您的 getTrackbarPos 值是否返回为负数?
  • gettrackbarpos 只会在找不到跟踪栏时返回 -1(这是因为您在调用 Blur 时正在寻找 ksize),它应该始终返回一个介于低和高之间的数字,因此您应该删除- 来自 ksize

标签: python opencv image-processing cv2 trackbar


【解决方案1】:

有一个简单的错误,你正在做。您在此处将轨迹栏名称定义为 “Blur”

cv2.createTrackbar('Blur', 'Image',low,high,nothing)

然后您将轨迹栏称为 "ksize"

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

这是错误的,所以如果你只是用这个来改变这一行:

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

它会修复的。

注意:正如@fmw42 在 cmets 中提到的,您计算的中位数也存在一些问题。你可以重新检查一下。

【讨论】:

  • 谢谢!代码现在工作得很好!是的,我改变了 ksize。之后我将其更改为 cv2.blur 而不是中值模糊。这对我来说效果更好!
猜你喜欢
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多