J'ai une image en niveaux de gris qui n'a qu'un canal. J'utilise un code qui prévoit que toutes les images ont trois canaux. Comment puis-je convertir mon image en une image à 3 canaux en utilisant certaines commandes Linux?
Voici l'erreur que je reçois et je ne veux pas changer le code, je veux plutôt changer l'image:
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
L'image:
$ identify 10524.jpg
0524.jpg JPEG 1050x550 1050x550+0+0 8-bit PseudoClass 256c 80.7KB 0.000u 0:00.000
Ceci est l'image:
Le code Python suivant fonctionne:
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)
Installez ImageMagick si nécessaire:
Sudo apt install imagemagick
(Vous pouvez également installer la dernière version à partir de la source sur Ubuntu 18.04 après ce guide )
Pour séparer les canaux d’image, exécutez:
convert rose: -channel R -separate separate_red.gif
convert rose: -channel G -separate separate_green.gif
convert rose: -channel B -separate separate_blue.gif
(suivant ce guide )
ou pour combiner des canaux d'image RVB, exécutez:
convert separate_red.gif separate_green.gif separate_blue.gif \
-combine -set colorspace sRGB rose_combined.gif
(suivant ce guide )
Cela fonctionnera aussi pour JPG. Vous pouvez également essayer de combiner des copies des mêmes images en niveaux de gris avec 3 canaux différents.