Используйте cv2.createTrackbar для размытия изображений с помощью python

Я попробовал следующий код:

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()

Изменение положения ползунка не влияет на изображение. У меня проблемы с решением этого. Я думаю, есть что-то, что мне не хватает! Пожалуйста помоги!


person Mr.J    schedule 13.06.2021    source источник
comment
Размер вашего фильтра medianBlur всегда отрицательный, если ksize положительный. Вы хотели использовать +2*ksize-1, а не -2*ksize-1?   -  person fmw42    schedule 14.06.2021
comment
Я так не думаю. он должен быть отрицательным. Вот ссылка stackoverflow.com/questions/ 53152665/   -  person Mr.J    schedule 14.06.2021
comment
ссылка имеет ту же ошибку.   -  person Christoph Rackwitz    schedule 14.06.2021
comment
ХОРОШО. Спасибо, я этого не знал. Извините за вопрос. Я не использовал getTrackbarPos(), и отрицательное значение показалось мне странным. Проверьте значение ksize, используемое в medianBlur, чтобы убедиться, что оно соответствует вашим ожиданиям. Убедитесь, что значение while(True) на самом деле равно True. Вы действительно убедились, что ваше значение getTrackbarPos возвращается как отрицательное?   -  person fmw42    schedule 14.06.2021
comment
gettrackbarpos вернет -1 только в том случае, если трекбар не найден (это потому, что вы ищете ksize, когда он называется Blur), он всегда должен возвращать число между низким и высоким, поэтому вы должны удалить - из ksize   -  person Ta946    schedule 14.06.2021
comment
Да, внесли необходимые изменения и получили результаты! Спасибо   -  person Mr.J    schedule 14.06.2021


Ответы (1)


Есть простая ошибка, которую вы делаете. Здесь вы определили имя трекбара как Размытие:

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

Затем вы вызываете свой трекбар как ksize

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

что неверно, поэтому, если вы просто измените эту строку на эту:

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

это исправит.

Примечание. Как упоминалось в комментариях @fmw42, есть некоторые проблемы с вычислением среднего размера. Вы можете перепроверить его.

person Yunus Temurlenk    schedule 14.06.2021
comment
Спасибо! Теперь код работает нормально! Да, я меняю ксайз. Впоследствии я меняю его на cv2.blur вместо медианного размытия. Это работает лучше для меня! - person Mr.J; 14.06.2021