如何使用python将像素映射到新图像中的值?

时间:2019-06-03 17:35:13

标签: python matlab opencv image-processing jupyter-notebook

我试图将图像映射到速度模型,其中颜色代表速度,所以我使用OpenCV读取图像,确定其尺寸,在一定范围内创建速度数组,然后尝试重新创建图像有了这些值,我在matlab中看到了一个非常相似的算法:

`vi = 1000;     vf = 4200;     M = imread('modelo_vr_2500x300.png');

Lx=size(M,1);
Ly=size(M,2);

N=M(1:Lx,1:Ly,1);

cor2=0:255;
vel2=cor2/256*(vf-vi)+vi; 
V=zeros(size(N));
for i=1:length(cor2)   
    V=V+vel2(i)*(N==cor2(i));
end
imagesc(V)
colorbar`

所以我试图使其适应Python,但似乎无法正常工作,我得到的只是一张全黑的图像,但是如果我打印V,则新图像具有值,但它们值很高。我不知道我在做什么错,有人可以帮忙吗?

导入CV2     #读取图像     img = cv2.imread(“ figures / teste03-06B.png”,cv2.IMREAD_UNCHANGED)     #获取图像尺寸     尺寸= img.shape

# height = Ly, width = Lx, number of channels in image = Ch
Ly = img.shape[0]
Lx = img.shape[1]
Ch = img.shape[2]

N=img[0:Ly, 0:Lx, 0:Ch]

print('Image Dimension    : ',dimensions)
print('Image Height       : ',Ly)
print('Image Width        : ',Lx)
print('Number of Channels : ',Ch) 

cv2.imshow("Display window", img)
cv2.waitKey(0)
cv2.destroyWindow("Display window")

import numpy as np

vi=2000
vf=6000
color=np.array(range(256))

vel=((color/256)*(vf-vi))+vi

V = np.zeros_like(img)

for i in range(0,len(color)):
if N[i]==color[i]:
    V=V+vel[i]
else:
    V=V
print(V)

cv2.imshow("Display window", V)
cv2.waitKey(0)
cv2.destroyWindow("Display window")`

它没有给出任何错误消息,只是不能正常工作,我不知道为什么...

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找这个:

new_image = vel[img]

但是您可能想先对vel进行归一化。的某些变体:

vel = vel/max(vel) * 255
vel = vel.astype(dtype=np.uint8)

我认为应该可以。