让我们想象一个存储数值的嵌套(二维)10x10 数组。我通常看到的迭代值的经典方法是嵌套循环,顺序读取第一个“行”的元素,然后转到下一个。
如果这些行中的每一行都占用一个单独的内存区域,则将有 10 次通过这些区域的转换,以及对行中各个元素的 10 次访问。
(模式:元素=数组[X][Y])据我所知,访问行(X)比访问其中的元素(Y)花费更多的计算资源。
问题: 当非顺序访问数组元素时,并且行间跳转更加频繁(总共会产生超过 10 次转换),搜索时间会增加吗?
让我们想象一个存储数值的嵌套(二维)10x10 数组。我通常看到的迭代值的经典方法是嵌套循环,顺序读取第一个“行”的元素,然后转到下一个。
如果这些行中的每一行都占用一个单独的内存区域,则将有 10 次通过这些区域的转换,以及对行中各个元素的 10 次访问。
(模式:元素=数组[X][Y])据我所知,访问行(X)比访问其中的元素(Y)花费更多的计算资源。
问题: 当非顺序访问数组元素时,并且行间跳转更加频繁(总共会产生超过 10 次转换),搜索时间会增加吗?
我的任务很简单,通过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]