Issue in creating subimages from image dataset

username: Trishna_Barman
cooked: <p>I want to divide the image dataset into subimages. The code used for extarcting the subimages doesn’t work on my data. The code is given here</p>
<pre><code class="lang-auto">import cv2
from multiprocessing import Pool
import numpy as np
import os
import sys
#from common import ProgressBar
from shutil import get_terminal_size
import time
def main():
    """A multi-thread tool to crop sub imags."""
    input_folder = 'DIV2K/DIV2K_train_HR'  # original image folder 
    save_folder = 'DIV2K/DIV2K_train_HR_sub'  # the created sub-image folder
    n_thread = 20

    # for hr
    crop_sz = 480
    step = 240
    thres_sz = 48

    compression_level = 3  # 3 is the default value in cv2
    # CV_IMWRITE_PNG_COMPRESSION from 0 to 9. A higher value means a smaller size and longer
    # compression time. If read raw images during training, use 0 for faster IO speed.
    
    if not os.path.exists(save_folder):
        os.makedirs(save_folder)
        print('mkdir [{:s}] ...'.format(save_folder))
    else:
        print('Folder [{:s}] already exists. Exit...'.format(save_folder))
        sys.exit(1)
    
    img_list = []
    for root, _, file_list in sorted(os.walk(input_folder)):
        path = [os.path.join(root, x) for x in file_list]  # assume only images in the input_folder
        img_list.extend(path)
    
    def update(arg):
        pbar.update(arg)

    pbar = ProgressBar(len(img_list))

    pool = Pool(n_thread)
    for path in img_list:
        pool.apply_async(worker,
                         args=(path, save_folder, crop_sz, step, thres_sz, compression_level),
                         callback=update)
    pool.close()
    pool.join()
    print('All subprocesses done.')
    
class ProgressBar(object):
    '''A progress bar which can print the progress
    modified from https://github.com/hellock/cvbase/blob/master/cvbase/progress.py
    '''

    def __init__(self, task_num=0, bar_width=50, start=True):
        self.task_num = task_num
        max_bar_width = self._get_max_bar_width()
        self.bar_width = (bar_width if bar_width &lt;= max_bar_width else max_bar_width)
        self.completed = 0
        if start:
            self.start()

    def _get_max_bar_width(self):
        terminal_width, _ = get_terminal_size()
        max_bar_width = min(int(terminal_width * 0.6), terminal_width - 50)
        if max_bar_width &lt; 10:
            print('terminal width is too small ({}), please consider widen the terminal for better '
                  'progressbar visualization'.format(terminal_width))
            max_bar_width = 10
        return max_bar_width

    def start(self):
        if self.task_num &gt; 0:
            sys.stdout.write('[{}] 0/{}, elapsed: 0s, ETA:\n{}\n'.format(
                ' ' * self.bar_width, self.task_num, 'Start...'))
        else:
            sys.stdout.write('completed: 0, elapsed: 0s')
        sys.stdout.flush()
        self.start_time = time.time()

    def update(self, msg='In progress...'):
        self.completed += 1
        elapsed = time.time() - self.start_time
        fps = self.completed / elapsed
        if self.task_num &gt; 0:
            percentage = self.completed / float(self.task_num)
            eta = int(elapsed * (1 - percentage) / percentage + 0.5)
            mark_width = int(self.bar_width * percentage)
            bar_chars = '&gt;' * mark_width + '-' * (self.bar_width - mark_width)
            sys.stdout.write('\033[2F')  # cursor up 2 lines
            sys.stdout.write('\033[J')  # clean the output (remove extra chars since last display)
            sys.stdout.write('[{}] {}/{}, {:.1f} task/s, elapsed: {}s, ETA: {:5}s\n{}\n'.format(
                bar_chars, self.completed, self.task_num, fps, int(elapsed + 0.5), eta, msg))
        else:
            sys.stdout.write('completed: {}, elapsed: {}s, {:.1f} tasks/s'.format(
                self.completed, int(elapsed + 0.5), fps))
        sys.stdout.flush()

def worker(path, save_folder, crop_sz, step, thres_sz, compression_level):
    img_name = os.path.basename(path)
    img = cv2.imread(path, cv2.IMREAD_UNCHANGED)
    print(img.shape)

    n_channels = len(img.shape)
   
    if n_channels == 2:
        h, w = img.shape
        
    elif n_channels == 3:
        h, w, c = img.shape
        
    else:
        raise ValueError('Wrong image shape - {}'.format(n_channels))

    h_space = np.arange(0, h - crop_sz + 1, step)
    if h - (h_space[-1] + crop_sz) &gt; thres_sz:
        h_space = np.append(h_space, h - crop_sz)
    w_space = np.arange(0, w - crop_sz + 1, step)
    if w - (w_space[-1] + crop_sz) &gt; thres_sz:
        w_space = np.append(w_space, w - crop_sz)
    print(w_space)
    index = 0
    for x in h_space:
        for y in w_space:
            index += 1
            if n_channels == 2:
                crop_img = img[x:x + crop_sz, y:y + crop_sz]
            else:
                crop_img = img[x:x + crop_sz, y:y + crop_sz, :]
                print(crop_img)
            crop_img = np.ascontiguousarray(crop_img)
            
            # var = np.var(crop_img / 255)
            # if var &gt; 0.008:
            #     print(img_name, index_str, var)
            if 'x' in img_name:
                iid = img_name.split('x')[0]
                new_name = img_name.replace(iid, iid + '_s{:03d}'.format(index))
            else:
                new_name = img_name.replace('.png', '_s{:03d}.png'.format(index))
            cv2.imwrite(os.path.join(save_folder, new_name),
                crop_img, [cv2.IMWRITE_PNG_COMPRESSION, compression_level])
    return 'Processing {:s} ...'.format(img_name)


if __name__ == '__main__':
    main()

</code></pre>
<p>Images of input folder are loaded and read correctly, but the output folder shows empty. I have attached the screenshot of the issue I’ve encountered.<br>
<div class="lightbox-wrapper"><a class="lightbox" href="https://discuss.pytorch.org/uploads/default/original/3X/3/9/398485094ec9d38361aa3195176176b2756cd840.png" data-download-href="https://discuss.pytorch.org/uploads/default/398485094ec9d38361aa3195176176b2756cd840" title="extraction_of_subimage"><img src="https://discuss.pytorch.org/uploads/default/original/3X/3/9/398485094ec9d38361aa3195176176b2756cd840.png" alt="extraction_of_subimage" data-base62-sha1="8cP8y6TF3ZGxb7GzXc6W5aSH4Oc" width="690" height="106" data-dominant-color="212121"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename">extraction_of_subimage</span><span class="informations">1080×167 5.1 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div></p>
<p>Please help me to solve this issue.</p>