как отделить изображение с помощью цветного канала в python? - PullRequest
0 голосов
/ 04 апреля 2020

Здравствуйте. Я хочу разделить объект, основанный на его цвете, на новое изображение, используя python PIL

, но я не совсем понимаю его asp. Я все еще новичок с python.

, что я уже сделал, это код от Matlab, и он работает

G = imread('x.png');
L = G;
for i=1:217 #this is image height
    for j=1:286 #this is image width
        for k=1:3 #this is color RGB channel
            if(L(i,j,2) < 174) #if green value is under 174
                L(i,j,k) = L(i,j,k);
            else
                L(i,j,k) = 256; #change to white
            end

            if(L(i,j,3) < 174) #if blue value is under 174
                L(i,j,k) = L(i,j,k);
            else
                L(i,j,k) = 256; #change to white
            end
        end
    end
end
imshow(L)

Могу ли я получить надлежащее объяснение того, как вы делаете это с помощью python PIL?

большое спасибо

edit:

Я пытаюсь сделать что-то вроде этого

https://imgur.com/6n1QCfR

Тогда результат будет

https://imgur.com/p99kN5p

1 Ответ

0 голосов
/ 04 апреля 2020

Вот очень простой способ сделать это, используя PIL / Pillow:

#!/usr/bin/env python3

from PIL import Image
import numpy as np

# Load image and ensure it is RGB (not palette)
im = Image.open('circles.jpg').convert('RGB')

# Make into Numpy array so we can do fast, vectorised operations
na = np.array(im)

# Make a mask, which is True wherever Blue channel is high, False elsewhere - see #1 below
mBlueHi = na[...,2] >= 174

# Likewise for Green channel - see #2 below
mGreenHi = na[...,1] >= 174

# In our original image "na", anywhere the Green or Blue mask is set, make it white
na[mGreenHi | mBlueHi] = [255,255,255]

# Make back into PIL Image and save
Image.fromarray(na).save('result.png')

enter image description here

Примечание # 1: изображение сохраняется в 3-х мерный массив, высота х ширина х каналов RGB. Красный находится в канале 0, поэтому na[:,:,0] и na[...,0] - сокращение от этой же вещи.

Примечание # 2: Зеленый находится во втором канале, начиная с индекса 0, поэтому зеленые пиксели могут быть адресовано с использованием na[:,:,1] или равно na[...,1]

Обратите внимание, что JPEG с потерями и часто является плохим выбором для промежуточных файлов при обработке изображений, поскольку он изменяет значения, чтобы сделать файлы меньше. Попробуйте использовать PNG без потерь.

...