image-processing - OpenCv 构建时不保存图像?

标签 image-processing pixel numpy-ndarray opencv python

我正在尝试从像素数组(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) 是一种常用的数字图像有损压缩方法,特别是对于数字摄影生成的图像。

关于image-processing - OpenCv 构建时不保存图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51206036/

相关文章:

python - 在频域中改变亮度

objective-c - 在 objective-c cocoa 应用程序中获取屏幕上像素的颜色

python - 使用 np.diag 分配移动的对角线值

python - 如何在 numpy/scipy/pandas 中生成匹配的矩阵/数组?

python - 从图像中删除最大轮廓

qt - 带有 Qt 函数 cv::erode() 和 cv::dilate() 的 OpenCV 崩溃

matlab - 在 MATLAB 中计算测地距离

C - 从左到右镜像 PPM

android - 如何获取缩放后的图片宽度

python-3.x - 就地执行 numpy exp 函数