Преобразуйте 1 изображение канала в 3 изображения канала

У меня есть полутоновое изображение, которое имеет только 1 канал. Я использую код, который ожидает, что все изображения будут иметь три канала. Как я могу преобразовать свое изображение в 3 изображения канала с помощью некоторых команд Linux?

Вот ошибка, которую я получаю, и я не хочу изменять код, скорее я хочу изменить изображение:

Traceback (most recent call last):
  File "get_img_vec.py", line 22, in <module>
    nd_arr = img2vec.get_vec(img)
  File "../img_to_vec.py", line 43, in get_vec
    h_x = self.model(image)
  File "/scratch/sjn-p3/anaconda/anaconda3/lib/python3.6/site-packages/torch/nn/modules/module.py", line 477, in __call__
    result = self.forward(*input, **kwargs)
  File "/scratch/sjn-p3/anaconda/anaconda3/lib/python3.6/site-packages/torchvision-0.2.1-py3.6.egg/torchvision/models/resnet.py", line 139, in forward
  File "/scratch/sjn-p3/anaconda/anaconda3/lib/python3.6/site-packages/torch/nn/modules/module.py", line 477, in __call__
    result = self.forward(*input, **kwargs)
  File "/scratch/sjn-p3/anaconda/anaconda3/lib/python3.6/site-packages/torch/nn/modules/conv.py", line 301, in forward
    self.padding, self.dilation, self.groups)
RuntimeError: Given groups=1, weight of size [64, 3, 7, 7], expected input[1, 1, 224, 224] to have 3 channels, but got 1 channels instead

Изображение:

$ identify 10524.jpg
0524.jpg JPEG 1050x550 1050x550+0+0 8-bit PseudoClass 256c 80.7KB 0.000u 0:00.000

Это - изображение:

black and white photo of a face

2
задан 4 January 2019 в 13:16

2 ответа

Следующий Python кодирует работы:

import cv2
import numpy as np
img = cv2.imread('10524.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img2 = np.zeros_like(img)
img2[:,:,0] = gray
img2[:,:,1] = gray
img2[:,:,2] = gray
cv2.imwrite('10524.jpg', img2)
2
ответ дан 2 December 2019 в 02:41
  1. При необходимости установите ImageMagick:

    sudo apt install imagemagick
    

(Вы также можете установить последнюю версию из исходного кода в Ubuntu 18.04, следуя этому руководству ])

  1. Для разделения каналов изображения выполните:

      convert rose: -channel R -separate separate_red.gif
      convert rose: -channel G -separate separate_green.gif
      convert rose: -channel B -separate separate_blue.gif
    

    (следуя в этом руководстве )

    или объедините RGB работают каналы изображений:

    convert  separate_red.gif separate_green.gif separate_blue.gif \
             -combine -set colorspace sRGB rose_combined.gif
    

    (следуя этому руководству )

Это будет работать и для JPG. Также вы можете попробовать объединить копии одного и того же изображения в оттенках серого с 3 разными каналами.

1
ответ дан 2 December 2019 в 02:41

Другие вопросы по тегам:

Похожие вопросы: