Подушка, эквивалентная следующему коду openCV - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь преобразовать следующий модуль кода, написанный в openCV, в подушку, но я не могу понять, как это сделать? J - изображение RGB

img = cv2.imread(j,1)
b,g,r = cv2.split(img)
green = 2*g-r-b

Здесь я читаю цветное изображение, а затем разбиваюсь на каналы, а затем выполняю преобразование в зеленом канале, а затем использую зеленый канал для дальнейшей работы, но я не могу изобразить подушечный эквивалент приведенного выше кода.
Я пытался задать этот вопрос Изображение Python PIL, разделенное на RGB , но мне не удалось получить результат для 2*g-r-b

1 Ответ

0 голосов
/ 25 января 2019

Вы можете сделать это, используя PIL и Numpy, вот так - я склоняюсь к Numpy, так как он быстрее и гибче:

#!/usr/bin/env python3

import numpy as np
from PIL import Image

# Open input image and ensure it is RGB
im = Image.open('start.png').convert('RGB')

# Make into Numpy array
imnp = np.array(im)

# Split into 3 constituent bands
r = imnp[:, :, 0]
g = imnp[:, :, 1]
b = imnp[:, :, 2]

# Process
g = 2*g - r - b

# Recombine to single image and save
merged = np.dstack((r, g, b))
Image.fromarray(merged).save('result.png')

Или вы можете быть менее явными в разделении и делатьна месте всего изображения:

#!/usr/bin/env python3

import numpy as np
from PIL import Image

# Open input image and ensure it is RGB
im = Image.open('start.png').convert('RGB')

# Make into Numpy array
imnp = np.array(im)

# Process
imnp[:,:,1] = 2*imnp[:,:,1] - imnp[:,:,0] - imnp[:,:,2]

# Save
Image.fromarray(imnp).save('result2.png')
...