Итеративное наложение прозрачного изображения на другое изображение с использованием CV2 - PullRequest
0 голосов
/ 16 марта 2020

Я написал некоторый код, который использует while l oop для перебора изображения размером 1000x1000 пикселей в патчах 50x50 пикселей и загружает ранее обученный классификатор для прогнозирования класса каждого патча 50x50. Если метка патча равна «0», я хочу нарисовать прямоугольник на этом патче, так что в конце все патчи с меткой «0» будут выделены.

import tensorflow as tf
from tensorflow.keras.models import Sequential
import os
import numpy as np
from skimage import io, segmentation, data, color, img_as_float
import cv2

## load keras model
model = tf.keras.models.load_model('./model.h5')

## load image
im = skimage.io.imread('/path/to/image.png')[:,:,0:3]
im_x = im.shape[0]
im_y = im.shape[1]

## rescale image to range 0 to 1
im_rescaled = skimage.img_as_float(im.copy())

x = 0
y = 0
output = im.copy()
alpha = 0.3

while ( y + 50 ) <= im_y:
        while ( x + 50 ) <= im_x:
                overlay = im.copy()
                patch = im_rescaled[x:x+50, y:y+50]
                patch_reshaped = np.reshape(patch, ((1, 50, 50, 3)))
                y_new = model.predict_classes(patch_reshaped)
                if y_new == 0:
                        overlay = cv2.rectangle(overlay, (x, y), (x+50, y+50), (0, 255, 255), -1)
                        output = cv2.addWeighted(overlay, alpha, output, 1 - alpha, 0, output)
                x += 50
        x = 0
        y += 50

skimage.io.imsave('./overlay.png', output)

Однако на выходе получается просто необработанное изображение:

enter image description here

...