Пороговая обработка нескольких изображений в Python с использованием OpenCv - PullRequest
0 голосов
/ 24 марта 2020

Я хотел бы оцифровать целую папку изображений и сохранить их. Я уже нашел код, который преобразует в двоичную форму одно изображение и сохраняет его в той же папке:

import cv2
im_gray = cv2.imread('blurredimg1.png', cv2.IMREAD_GRAYSCALE)
(thresh, im_bw) = cv2.threshold(im_gray, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
thresh = 127
im_bw = cv2.threshold(im_gray, thresh, 255, cv2.THRESH_BINARY)[1]
cv2.imwrite('bw_image.png', im_bw)

Вот вывод

Изображение

Вот файл в папке

Теперь я хотел бы использовать порог для всего набора сразу. Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 25 марта 2020

Следующее проверено и работает в Unix синтаксисе пути на моем Ma c в Python / OpenCV. И я не Windows пользователь. Так что вам нужно будет изменить пути соответствующим образом для вашей ОС и изменить мои "/" на "\", где они конкретно указаны в путях

. Вам нужно определить путь, куда вы хотите поместить вывод каталог для хранения созданных изображений. Я использовал in_dir и out_dir. каталог out_dir должен уже существовать.

Так что-то вроде следующего. Где я получаю порог OTSU вне l oop и сохраняю пороговое значение из вашего размытого изображения. Затем я * l oop поверх всех изображений во входном каталоге через ваш img_mask. Я порождаю каждое изображение, используя порог, который был сохранен, а затем записываю файл на диск внутри l oop.

from glob import glob
import os
import cv2

# read your one blurred image and convert to gray
im_gray = cv2.imread('test/lena.png', 0)

# threshold it with OTSU thresholding and get the threshold value
thresh, im_bw = cv2.threshold(im_gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
print(thresh)

# define the paths to your input images and to where you want to put the output images    
in_dir = 'test'
out_dir = 'test2'

# read the input image file names with paths into a list
infiles = in_dir + '/*.png'
img_names = glob(infiles)
print(img_names)

# loop over each input image in a for loop
for fn in img_names:
    print('processing %s...' % fn)

    # read an input image as gray
    im_gray = cv2.imread(fn, 0)

    # threshold it with your saved threshold
    im_bw = cv2.threshold(im_gray, thresh, 255, cv2.THRESH_BINARY)[1]

    # write the result to disk in the previously created output directory
    name = os.path.basename(fn)
    outfile = out_dir + '/' + name
    cv2.imwrite(outfile, im_bw)


0 голосов
/ 25 марта 2020

Вот оно:

from glob import glob import cv2 img_mask = r'C:\Users\Bsi\Desktop\PFE\Mine\*.png' img_names = glob(img_mask) for fn in img_names: print('processing %s...' % fn,) im_gray = cv2.imread(fn, 0) (thresh, im_bw) = cv2.threshold(im_gray, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU) thresh = 127 im_bw = cv2.threshold(im_gray, thresh, 255, cv2.THRESH_BINARY)[1]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...