我的任务很简单,通过OPENCV(cv2)打开彩色图像,并为每个像素计算 B、G、R(RGB) 值之间的差异。据我所知,当通过“cv2.imread”打开时,图像立即变成一个多维数组,类似于“numpy”数组。
但是,当我使用“numpy”中的方法 - np.diff()并尝试获取单个像素的通道之间的差异时,如下所示:np.diff(IMG[0][0])显示错误的结果。当您尝试像这样完全处理数组时,也会发生同样的事情: = np.diff(IMG)。
为了实验,我后来尝试添加轴(axis=),但没有效果。
import cv2
import numpy as np
IMG = cv2.imread("IMAGE_PRIMER.png")#Открываю изображение
pix1 = IMG[0][0]#-----------------Пиксель взятый из массива 'IMG'
pix2 = np.array([158, 43, 37])#---Сгенерированный такой-же
#одинаковые пиксели
print("пиксель-1:", pix1) #[158 43 37]
print("пиксель-2:", pix2) #[158 43 37]
#но разные дифференты
print("дифферент-1:", np.diff(IMG[0][0])) #[141 250]
print("дифферент-2:", np.diff(pix2)) #[-115 -6]
如您所见,生成的像素 [158 43 37] 已正确处理:[-115 -6]
但从图像中获取的类似结果给出了结果:[141,250]
我将向您展示如何获得相同的结果:
结论:
默认情况下,数组
numpy是有符号类型的,例如np.int32。而带有图片的数组类型通常是np.uint8因为像素值通常位于范围内[0, 255]。您有不同类型的数组。数组上的所有操作的结果都将转换回其类型。如果想要相同的结果,请将数组转换为相同的类型。结论:
在处理数据时,不仅要查看数据本身,还要查看其类型,这一点很重要。