Могу ли я перебрать изображение, игнорируя черные пиксели? - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть сегментированное изображение с использованием SLI C от scipy, и для каждого суперпикселя я получаю изображение, где только этот суперпиксель окрашен, а остальная часть изображения черная. Я хочу повторять ТОЛЬКО на цветных пикселях этого суперпикселя. Я попытался использовать для l oop следующим образом:

for i in range(0,mask.shape[0]):
        for j in range(0,mask.shape[1]):
            x,y,z = each_segment[i][j] #gets the pixel RGB value
            unique_pixel_array = [x,y,z] #creates a vector that holds those values for each pixel
            if (unique_pixel_array != [0,0,0]):
                print(unique_pixel_array)

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

Я приложу весь код ниже, может быть, вы получите лучшее представление обо всем этом.

from skimage.segmentation import slic
from skimage.segmentation import mark_boundaries
from skimage.util import img_as_float
import matplotlib.pyplot as plt
import numpy as np
import cv2


img = cv2.imread("image.png")
segments = slic(img_as_float(img),n_segments= 7 ,slic_zero=True,sigma =5)
fig = plt.figure("Superpixels -- %d segments" % (22))
ax = fig.add_subplot(1, 1, 1)
ax.imshow(mark_boundaries(img, segments))
plt.axis("off")
plt.show()

for (sp,segVal) in enumerate (np.unique(segments)):

    mask = np.zeros(img.shape[:2],dtype = "uint8")
    mask[segments == segVal] = 255
    each_segment = cv2.bitwise_and(img,img,mask=mask)

    for i in range(0,mask.shape[0]):
        for j in range(0,mask.shape[1]):      
            x,y,z = each_segment[i][j]
            unique_pixel_array = [x,y,z]
            print(unique_pixel_array)



    cv2.imshow("Mask", mask)
    cv2.imshow("Applied", cv2.bitwise_and(img, img, mask = mask))
    cv2.waitKey(0)
...