OpenCv 不保存构建时的图像?
OpenCv does not save images as it was constructed?
我正在尝试从像素阵列 (numpy.ndarray) 中保存图像。假设我的像素数组是 myArray。当我在 Python 解释器中键入 myArray 时,它显示的值为:
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)
知道为什么会这样吗?
这是因为jpeg数据压缩时数据丢失。如果您想无损保存,请将其保存为无损png。
JPEG (/ˈdʒeɪpɛɡ/ JAY-peg) 是一种常用的数字图像有损压缩方法,特别是对于那些由数字摄影产生的图像。
我正在尝试从像素阵列 (numpy.ndarray) 中保存图像。假设我的像素数组是 myArray。当我在 Python 解释器中键入 myArray 时,它显示的值为:
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)
知道为什么会这样吗?
这是因为jpeg数据压缩时数据丢失。如果您想无损保存,请将其保存为无损png。
JPEG (/ˈdʒeɪpɛɡ/ JAY-peg) 是一种常用的数字图像有损压缩方法,特别是对于那些由数字摄影产生的图像。