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 图像,结果相同。
您 运行 遇到的现象是数据压缩没有 100% 严格定义的结果。 PNG 文件使用 DEFLATE 压缩,这要求给定的压缩文件必须始终解压缩为相同的输出,但不要求给定的输入必须产生相同的压缩文件。这为改进压缩算法提供了空间,可以在不同类型的文件上找到更优化的压缩。听起来您的原始图像是使用比 cv2
使用的算法更好(或只是不同)的算法压缩的。为了复制完全相同的压缩版本,您可能需要与用于创建原始图像的压缩算法完全相同的实现。
如果你想确保图像确实相同,你应该比较解码后的像素值。以不重复发明轮子的名义,我将向您推荐有关该主题的 this 优秀博客 post。
编辑: 链接的文章对我来说加载不一致,所以我复制了这里的代码以供参考。
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")
我有以下代码:
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 图像,结果相同。
您 运行 遇到的现象是数据压缩没有 100% 严格定义的结果。 PNG 文件使用 DEFLATE 压缩,这要求给定的压缩文件必须始终解压缩为相同的输出,但不要求给定的输入必须产生相同的压缩文件。这为改进压缩算法提供了空间,可以在不同类型的文件上找到更优化的压缩。听起来您的原始图像是使用比 cv2
使用的算法更好(或只是不同)的算法压缩的。为了复制完全相同的压缩版本,您可能需要与用于创建原始图像的压缩算法完全相同的实现。
如果你想确保图像确实相同,你应该比较解码后的像素值。以不重复发明轮子的名义,我将向您推荐有关该主题的 this 优秀博客 post。
编辑: 链接的文章对我来说加载不一致,所以我复制了这里的代码以供参考。
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")