Как изменить изображение в формате png, прочитанное skimage.imread - PullRequest
0 голосов
/ 11 апреля 2019

Затем я читаю какой-то файл jpg, таким образом

image = imread('aa.jpg')

В результате получаю фрейм данных с номерами от 1 до 255

Я могу изменить его размер следующим образом:

from cv2 import resize
image = resize(image, (256, 256)

Но тогда я делаю то же самое с png, результат не желателен.

image = imread('aa2.png')  # array with number within 0-1 range
resize(image, (256,256)) # returns 1 channel image
resize(image, (256,256, 3))   # returns 3 channel image

Странное изображение enter image description here

Но imshow(image)

enter image description here

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

cv2.imread читает изображение по умолчанию в 3 каналах вместо 4. Передайте параметр cv.IMREAD_UNCHANGED, чтобы прочитать файл PNG, а затем попытайтесь изменить его размер, как показано в приведенном ниже коде.

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

img = cv.imread('Snip20190412_12.png', cv.IMREAD_UNCHANGED)
print(img.shape) #(215, 215, 4)

height, width = img.shape[:2]
res = cv.resize(img,(2*width, 2*height))
print(res.shape)#(430, 430, 4)
plt.imshow(res)

enter image description here

1 голос
/ 11 апреля 2019

Я полагаю, это проблема с вашим изображением или кодом.

Вот бесплатное изображение, которое можно попробовать: https://pixabay.com/vectors/copyright-free-creative-commons-98566/

Возможно, у вас проблемы с libpng, проверьте ответы: Предупреждение libpng: iCCP: известен неправильный профиль sRGB

Проверьте этот простой код, который работает с изображениями PNG.

     import cv2 as cv
     image = cv.imread("foto.png")
     if __name__ == "__main__":
          while True:
                image = cv.resize(image,(200,200))
                cv.imshow("prueba",image)

                key = cv.waitKey(10)
                if key == 27:
                    cv.destroyAllWindows()
                    break   

     cv.destroyAllWindows()
...