繁体   English   中英

CV2更改图像

[英]CV2 changes the image

我有以下代码:

import cv2 as cv
import numpy as np

im = cv.imread('outline.png', cv.IMREAD_UNCHANGED)
cv.imwrite('output.png', im)


f1 = open('outline.png', 'rb')
f2 = open('output.png', 'rb')

img1_b = b64encode(f1.read())
img2_b = b64encode(f2.read())

print(img1_b)
print(img2_b)

img1_b和img2_b不同的原因是什么? img2_b更长-为什么?

我不想复制文件-我想在保存之前对其进行处理,但是不包括这部分代码。

操作后,outline.png和output.png看起来都相同。

我可以在代码中进行哪些更改以使img2_b值与img1_b相同?

我已经尝试了PIL图像,结果相同。

您遇到的现象是未严格定义数据压缩的结果。 PNG文件使用DEFLATE压缩,这要求给定的压缩文件必须始终解压缩为相同的输出,但不要求给定的输入必须产生相同的压缩文件。 这为压缩算法提供了改进的空间,其中可以在不同类型的文件上找到更优化的压缩。 听起来您的原始图像是使用比cv2使用的算法更好(或略有不同)的算法cv2的。 为了复制精确的压缩版本,您可能需要与用于创建原始图像的压缩算法完全相同的实现。

如果要确保图像确实相同,则应比较解码后的像素值。 在不重新发明轮子的名字,我将把你这个关于这个问题的优秀博客文章。

编辑:链接的文章不是一直为我加载,所以我在这里复制了代码以供参考。

import cv2
import numpy as np

original = cv2.imread("imaoriginal_golden_bridge.jpg")
duplicate = cv2.imread("images/duplicate.jpg")

# 1) Check if 2 images are equals
if original.shape == duplicate.shape:
    print("The images have same size and channels")
    difference = cv2.subtract(original, duplicate)
    b, g, r = cv2.split(difference)
    if cv2.countNonZero(b) == 0 and cv2.countNonZero(g) == 0 and cv2.countNonZero(r) == 0:
        print("The images are completely Equal")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM