首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CV2改变图像

CV2改变图像
EN

Stack Overflow用户
提问于 2018-12-11 15:42:19
回答 1查看 983关注 0票数 1

我有以下代码:

代码语言:javascript
复制
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图像和相同的结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-11 16:53:18

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

如果要确保图像确实相同,则应比较解码后的像素值。以不重新发明车轮的名义,我将向您推荐关于这一主题的优秀博客文章。

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

代码语言:javascript
复制
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")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53727583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档