Считайте 50 изображений в виде каждой пиксельной матрицы из пула из 1000 изображений - PullRequest
0 голосов
/ 30 января 2020

У меня 1000 изображений в оттенках серого размером 800x600 пикселей. Каждый пиксель имеет значение между 0 ... 255.

Я хочу выделить 50 изображений из этой 1000 изображений. Из этих 50 изображений я хочу узнать макс. значение шкалы яркости (0 ... 255). Из этого я хочу построить только один новый образ с макс. значение шкалы (0 ... 255).

В конце я беру каждое из 1000 изображений, делю каждый пиксель на новый пиксель изображения и умножаю на 255.

Я начинаю с выбора первых 50 выбранных изображений:

from random import seed
from random import sample

# seed random number generator
seed(1)
# prepare a sequence
sequence = [i for i in range(1000)]
print(sequence)
# select a subset without replacement
subset = sample(sequence, 50)
                print("Chosed 50 random images: ", subset)

Затем я начинаю читать изображения в al oop. Считайте макс. значение пикселя из 50 выбранных изображений:

for i in range(0,49):
       for d in range(0, 599):
             for s in range(0, 799):
                      print("Chosed image: ", subset[i], "Chosed pixel (rundownstairs): ", d, "Chosed pixel (run sidewise): ", s )   

Но я не имею представления, чтобы прочитать пиксели в матрице и выполнить математические математические вычисления.

Ответы [ 2 ]

0 голосов
/ 30 января 2020

Поскольку у меня нет ваших изображений, я сгенерировал n случайных изображений. Я сделал массив с этими изображениями и нашел их координаты со значением max. Затем я организовал эти индексы так, чтобы их можно было прочитать: с listOfCordinates вы сможете начать выполнять операции с вашими пикселями. Обратите внимание, что я использовал numpy, я не знаю, если это проблема.

import numpy as np
import cv2
import matplotlib.cm as cm
import matplotlib.pyplot as plt
import glob, os

os.chdir("C:/Users\iareval1\Documents\OCLASS\class_def") #your folder
n = 5 #Number oof images
img_arr = [] #array with images
n_nad_files = []

for i in range(0,n):
    n_nad_files.append(glob.glob("*.png")[np.random.randint(n)])

for file in n_nad_files: #set the file termination
    img = cv2.imread(file, 0)
    img_arr.append(img)



dim_x = img_arr[0].shape[0]
dim_y = img_arr[0].shape[1]

img_with_max = np.zeros((dim_x, dim_y))


cnt = 0
for image in img_arr:
    print("Max values in image " +  str(cnt))
    for x in range (0, dim_x):
        for y in range (0, dim_y):
            img_with_max[x][y] = max(img_with_max[x][y], image[x][y])
    cnt += 1


Если вы хотите построить изображение, вы можете

plt.imshow(YOUR_IMAGE,cmap=cm.bone) #show your array with the selected colour
plt.show() #show the image
0 голосов
/ 30 января 2020

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

import cv2
import numpy as np


img = cv2.imread('image_file_path', 0)

Для поиска максимального значения в массиве вы можете использовать это:

max_value = np.max(img)

И для применения математических операций ко всему массиву просто сделайте что-то вроде этого:

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