I've written a denoising function with cv2
and concurrent.futures
, to be applied on both my training and test image data.
The functions (at current) are as follows:
def denoise_single_image(img_path):
nonlocal data
img = cv2.imread(f'../data/jpeg/{data}/{img_path}')
dst = cv2.fastNlMeansDenoising(img, 10,10,7,21)
cv2.imwrite(f'../processed_data/jpeg/{data}/{img_path}', dst)
print(f'{img_path} denoised.')
def denoise(data):
img_list = os.listdir(f'../data/jpeg/{data}')
with concurrent.futures.ProcessPoolExecutor() as executor:
tqdm.tqdm(executor.map(denoise_single_image, img_list))
data
is to be either train
or test
, as necessary; img_list
is a list of all image names in that directory.
I need to create the denoise_single_image()
function before denoise()
, otherwise denoise()
won't recognize it; but I need to define data
before I create denoise_single_image()
. This seems to be a catch-22, unless I can figure out how to tell denoise_single_image()
to refer to a variable that exists one level up.
nonlocal
doesn't work because it assumes that data
has already been defined in this environment. Is there any way to get this to work?