gpt4 book ai didi

python - 检查两个图像的 RGB 值之间的差异

转载 作者:行者123 更新时间:2023-12-01 00:16:23 25 4
gpt4 key购买 nike

现在,我有一个代码来提取 RGB 值并计算两个给定图像之间的差异,但我注意到一个图像中的一个问题,这让我停下来思考我是否做得正确。

这是我的代码:

import cv2
import math

dif_R = 0
dif_G = 0
dif_B = 0

img = cv2.imread("image1.jpg", cv2.IMREAD_COLOR)
imgcom = cv2.imread("image2.jpg", cv2.IMREAD_COLOR)


pixel = 100 / (img.shape[0] * img.shape[1])
for ih in range(img.shape[0]):
for iw in range(img.shape[1]):
pixelB, pixelG, pixelR = img[ih][iw]

pixelR = int(pixelR)
pixelG = int(pixelG)
pixelB = int(pixelB)

pixelcomB, pixelcomG, pixelcomR = imgcom[ih][iw]

pixelcomR = int(pixelcomR)
pixelcomG = int(pixelcomG)
pixelcomB = int(pixelcomB)

if pixelR != pixelcomR:
dif = math.fabs(pixelR - pixelcomR)
dif_R += (dif / 255) * pixel

if pixelG != pixelcomG:
dif = math.fabs(pixelG - pixelcomG)
dif_G += (dif / 255) * pixel

if pixelB != pixelcomB:
dif = math.fabs(pixelB - pixelcomB)
dif_B += (dif / 255) * pixel

print(dif_R, dif_G, dif_B)

我的图像是这样的:https://imgur.com/a/ryqf11r

如果执行代码,您可以看到,R 的差异为 11.78,G 的差异为 14.02,B 的差异为 16.66。但是您可以清楚地看到第一张图像是紫色的,而另一张图像是橙色的。

我看到了一种可选方法,即使用实验室色彩空间。这种方法的差异很大,但我需要 rgb 值...并且不知道我应该做什么...

如何解决这个问题或做其他事情来获得最准确的差异?我的代码做错了什么?

最佳答案

我想首先指出,您尝试实现此目标的方式效率非常低 - 在处理图像时绝对不需要逐个循环像素值。 Numpy 在向量运算方面非常强大,可以节省您宝贵的时间,尤其是在处理大量图像时。我为您提供了一个不同的实现,根据我对问题的理解,它应该可以解决您的问题。

from PIL import Image
import numpy as np

def jpg_image_to_array(image_path):
"""
Loads JPEG image into 3D Numpy array of shape (width, height, channels)
in double precision
"""
with Image.open(image_path) as image:
im_arr = np.fromstring(image.tobytes(), dtype=np.uint8)
im_arr = im_arr.reshape((image.size[1], image.size[0], 3)) /255
return im_arr

img1 = jpg_image_to_array("1.jpg")
img2 = jpg_image_to_array("2.jpg")
diff = np.absolute(img1 - img2)
print(np.sum(diff,axis=(0,1)))

请注意,此代码计算 R、G、B channel 之间的绝对差值,然后将该差值相加。您的图像结果:

[289702.61960608 344853.21176722 409960.28628742]

其中前三分之一的数字分别是 R、G、B channel 的差值之和。这对我来说很有意义,因为您的图像中有 1281 x 1920 像素。

如果您正在寻找平均差异,您可以将此列表除以像素数,即:

n_pixels = img1.shape[0]*img1.shape[1]

结果是:

[0.11778828 0.14021159 0.16668305]

关于python - 检查两个图像的 RGB 值之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59303243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com