OpenCv не сохраняет изображения, как это было построено? - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь сохранить изображение из массива пикселей (numpy.ndarray). Предположим, мой массив пикселей - это myArray. Когда я набираю myArray в интерпретаторе Python, он показывает значение как:

array([[[154, 161, 156],
    [154, 161, 156],
    [154, 160, 156],
    ...,
    [152, 157, 156],
    [151, 156, 155],
    [150, 155, 154]],

   [[155, 161, 156],
    [155, 161, 156],
    [155, 161, 156],
    ...,
    [152, 157, 156],
    [151, 156, 155],
    [150, 155, 154]],

   [[155, 161, 156],
    [155, 161, 156],
    [155, 161, 156],
    ...,
    [152, 157, 156],
    [151, 156, 155],
    [150, 155, 154]],

   ...,

   [[187, 193, 188],
    [187, 193, 188],
    [187, 193, 188],
    ...,
    [189, 194, 193],
    [189, 194, 193],
    [189, 194, 193]],

   [[188, 194, 189],
    [188, 194, 189],
    [188, 194, 189],
    ...,
    [189, 194, 193],
    [189, 194, 193],
    [189, 194, 193]],

   [[188, 194, 189],
    [188, 194, 189],
    [188, 194, 189],
    ...,
    [189, 194, 193],
    [189, 194, 193],
    [189, 194, 193]]], dtype=uint8)

Но когда я создаю новое изображение из этого массива с помощью cv2.imwrite('abc.jpg',myArray), а затем читаю это изображение с помощью cv2.imread('abc.jpg'), новый массив выглядит иначе. Это выглядит примерно так:

array([[[155, 161, 156],
    [155, 161, 156],
    [155, 161, 156],
    ...,
    [152, 157, 156],
    [151, 156, 155],
    [150, 155, 154]],

   [[155, 161, 156],
    [155, 161, 156],
    [155, 161, 156],
    ...,
    [152, 157, 156],
    [151, 156, 155],
    [150, 155, 154]],

   [[155, 161, 156],
    [155, 161, 156],
    [155, 161, 156],
    ...,
    [152, 157, 156],
    [151, 156, 155],
    [150, 155, 154]],

   ...,

   [[187, 193, 188],
    [187, 193, 188],
    [187, 193, 188],
    ...,
    [189, 194, 193],
    [189, 194, 193],
    [189, 194, 193]],

   [[188, 194, 189],
    [188, 194, 189],
    [188, 194, 189],
    ...,
    [189, 194, 193],
    [189, 194, 193],
    [189, 194, 193]],

   [[188, 194, 189],
    [188, 194, 189],
    [188, 194, 189],
    ...,
    [189, 194, 193],
    [189, 194, 193],
    [189, 194, 193]]], dtype=uint8)

Есть идеи, почему это происходит?

1 Ответ

0 голосов
/ 06 июля 2018

Это из-за потери данных при сжатии данных JPEG. если вы хотите сохранить без потерь, сохраните как png без потерь.

JPEG (/ ˈdʒeɪpɛɡ / JAY-peg) - это широко используемый метод сжатия с потерями для цифровых изображений, особенно для изображений, полученных цифровой фотографией.

...