簡體   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