【问题标题】:Using a lookup table with openCV and NumPy使用带有 openCV 和 NumPy 的查找表
【发布时间】:2015-04-09 17:05:23
【问题描述】:

我正在尝试使用 NumPy 和 CV2,方法是对像素数组进行像素数学运算,然后使用查找表并将该像素替换为查找表的值。

这个可以,但是太慢了,

image = cv2.imread('C:\\Users\\Event38\\Desktop\\IMG_2231.JPG')
height, width, depth = image.shape
image = image.astype('float')

B = image[:, :, 0]
G = image[:, :, 1]
R = image[:, :, 2]

num = ((R+G)-(2*B))
den = ((R+G)+(2*B))
NDVI = ((num/den)*127.5) + 127.5

print NDVI[0,0] # print array NDVI spot 0,0 value
print r[NDVI[0,0]][0] # looks up NDVI's spot 0,0 in LUT

for i in range(0, height):  
    for j in range (0, width):
        image.itemset((i,j,0),r[NDVI[i,j]][3])
        image.itemset((i,j,1),r[NDVI[i,j]][2])
        image.itemset((i,j,2),r[NDVI[i,j]][1])
#image = np.where(den == 0,1, NDVI).clip(0.0, 255.0)

任何关于如何使代码的 for 循环部分更快地工作的建议都会很棒,我知道有一些方法可以消除它。谢谢!

【问题讨论】:

  • 这完全取决于r 是什么。

标签: python opencv numpy pixel


【解决方案1】:

您可以尝试使用 OpenCV 的查找表一次性应用 LUT。这是documentation

C++

void LUT(InputArray src, InputArray lut, OutputArray dst, int interpolation=0 )

Python

cv2.LUT(src, lut[, dst[, interpolation]]) → dst

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-11
    • 2012-10-04
    • 2018-03-29
    • 2013-01-19
    • 2013-10-08
    • 2011-04-26
    • 1970-01-01
    • 2018-11-19
    相关资源
    最近更新 更多