Какой самый быстрый способ прочитать изображение на массив кортежей? - PullRequest
0 голосов
/ 22 марта 2020

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

import PIL

land_prov_pic = Image.open(INPUT_FILES_DIR + land_prov_str)
land_prov_array = np.array(land_prov_pic)
image_size = land_prov_pic.size
for x in range(image_size[0]):
    if x % 100 == 0:
        print(x)
    for y in range(image_size[1]):

        land_prov_array[x][y] = land_prov_pic.getpixel((x,y))

Где вы в конечном итоге с land_prov_array [x] [y] = (R, G, B )

Однако, это очень медленно, особенно для больших изображений. Я попытался прочитать его с помощью opencv, например:

import opencv
land_prov_array = cv2.imread(INPUT_FILES_DIR + land_prov_str)
land_prov_array = cv2.cvtColor(land_prov_array, cv2.COLOR_BGR2RGB) #Convert from BGR to RGB

Но теперь land_prov_array[x][y] = [R G B], который является ndarray и не может быть вставлен в набор. Но это намного быстрее, чем предыдущий для l oop. Как преобразовать [R G B] в (R,G,B) для каждого элемента в массиве без циклов for или, что еще лучше, прочитать его таким образом?

РЕДАКТИРОВАТЬ: добавлены картинки, подробное описание и блоки кода для удобства чтения ,

...