OpenCV перерисовать изображение при изменении значений - PullRequest
0 голосов
/ 03 декабря 2018

Я только начал использовать OpenCV, я использовал функцию определения угла Харриса.Я написал скрипт для поиска черных краев на картинке.

Я боролся с реализацией ползунка для динамической настройки порога изображения.

В данный момент ползунок устанавливает значение только до загрузки изображения.Он не обновляется при изменении значения с помощью ползунка.

Как мне заставить слайдер постоянно обновлять изображение при его перемещении?

Заранее спасибо

from threading import Thread
import time
import numpy as np
import cv2
from matplotlib import pyplot as plt
import tkinter
import sys

slideVal =1
def showVal(value):
        global slideVal
        value = int(value)
        print (type(value))
        slideVal = value

def harrisCorn():
        time.sleep(3)
        print(slideVal)

        print ("the current slider value is: ",slideVal)
        img = cv2.imread('rawGun.jpg')
        gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
        gray = np.float32(gray)
        #Changeing the value's in this function with : slideVal
        dst = cv2.cornerHarris(gray,slideVal,3,0.04)
        #result is dilated for marking the corners, not important
        dst = cv2.dilate(dst,None)

        # Threshold for an optimal value, it may vary depending on the image.
        img[dst>0.01*dst.max()]=[0,0,255]

        imgSize = cv2.resize(img,(1000,1000))

        cv2.imshow('dst', imgSize)
        if cv2.waitKey(0) & 0xff:
                cv2.destroyAllWindows()

def slider():
        root = tkinter.Tk()
        s = tkinter.Scale(orient='horizontal', from_=1, to=225, command=showVal)
        s.pack()
        root.mainloop()

if __name__ == '__main__':
    Thread(target = slider).start()
    time.sleep(3)
    Thread(target = harrisCorn).start()

1 Ответ

0 голосов
/ 04 декабря 2018

На самом деле вы можете использовать horrisCorn() в качестве функции command ползунка, чтобы при каждом изменении ползунка изображение обновлялось.Ниже изменен код блока на основе вашего кода:

import numpy as np
import cv2
import tkinter

def harrisCorn(slideVal):
    slideVal = int(slideVal)
    print("the current slider value is: ", slideVal)
    img = cv2.imread('rawGun.jpg')
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    gray = np.float32(gray)
    #Changeing the value's in this function with : slideVal
    dst = cv2.cornerHarris(gray, slideVal, 3, 0.04)
    #result is dilated for marking the corners, not important
    dst = cv2.dilate(dst, None)
    # Threshold for an optimal value, it may vary depending on the image.
    img[dst>0.01*dst.max()] = [0, 0, 255]
    imgSize = cv2.resize(img, (1000, 1000))
    cv2.imshow('dst', imgSize)

def slider():
    root = tkinter.Tk()
    tkinter.Scale(orient='horizontal', from_=1, to=225, command=harrisCorn).pack()
    harrisCorn(1)
    root.mainloop()

if __name__ == '__main__':
    slider()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...