I'm trying to create a variable sized kernel using np.ones method and trackbars in order to easily modify the size of the kernel. The problem seems to be that the width of the kernel does not decrease when the afferent parameter gets smaller. However this is not the case for the height of the kernel. The shape is correctly passed as a tuple of integers. Could anyone help me understand what's going on here?
import cv2 as cv
import numpy as
np np
def nothing(x):
pass pass
img = cv.imread('sudoku.jpg',
0) 0)
if img is None:
print ('Null Image')
else:
cv.namedWindow('Trackbars')
cv.namedWindow('Trackbars')
cv.createTrackbar('kernel_W', 'Trackbars', 1, 100, nothing)
cv.setTrackbarPos('kernel_W', 'Trackbars', 1)
cv.createTrackbar('kernel_H', 'Trackbars', 1, 100, nothing)
cv.setTrackbarPos('kernel_H', 'Trackbars', 1)
cv.createTrackbar('bin_Th', 'Trackbars', 1, 255, nothing)
cv.setTrackbarPos('bin_Th', 'Trackbars', 1)
print (img.shape)
while True:
kSize_w = cv.getTrackbarPos('kernel_W', 'Trackbars')
kSize_h = cv.getTrackbarPos('kernel_H', 'Trackbars')
bin_Th_val = cv.getTrackbarPos('bin_Th', 'Trackbars')
_, mask = cv.threshold(img, bin_Th_val, 255, cv.THRESH_BINARY)
kernel = np.ones((kSize_h,kSize_w), dtype = np.uint8)
dilation= cv.dilate(mask, kernel, iterations = 3)
cv.imshow('Initial Image', img)
cv.imshow('Kernel', kernel)
cv.imshow('mask', mask)
cv.imshow('dilation', dilation)
if cv.waitKey(2) == 27:
break