当数据的范围为[0-1]之间
在python中进行图片显示主要有3种方式,采用opencv进行显示、采用matplotlib.pyplot显示、采用PIL进行显示。在相关计算中,得出计算结果后,根据数值进行可视化的过程中,分别使用这三种方式进行显示的过程中,根据数值进行颜色对应显示的方式处理是不一样的。下面通过代码例子来说明这三种方式进行数值可视化中的不同。
采用opencv显示
import numpy as np
import cv2
a1=np.ones((500,500))*1
b1=np.zeros((500,500))
c1=np.vstack((a1,b1))
a2=np.ones((500,500))*0.7
b2=np.zeros((500,500))
c2=np.vstack((a2,b2))
a3=np.ones((500,500))*0.2
b3=np.zeros((500,500))
c3=np.vstack((a3,b3))
cv2.imshow('cv2 image1',c1)
cv2.imshow('cv2 image2',c2)
cv2.imshow('cv2 image3',c3)
cv2.waitKey()
图片结果显示
通过结果可以看出,当数据为0-1之间的浮点数时,cv2进行结果显示的过程中0对应黑色,1对应白色,中间的值对应灰度值,而且颜色与数值的关系是按照绝对的方式进行对应
采用matplotlib.pyplot显示
import numpy as np
import matplotlib.pyplot as plt
a1=np.ones((300,300))*1
b1=np.zeros((300,300))
c1=np.vstack((a1,b1))
a2=np.ones((300,300))*0.7
b2=np.zeros((300,300))
c2=np.vstack((a2,b2))
a3=np.ones((300,300))*0.2
b3=np.zeros((300,300))
c3=np.vstack((a3,b3))
a4=np.ones((300,300))*0.3
b4=np.ones((300,300))*0.6
c4=np.vstack((a4,b4))
plt.figure(1)
plt.subplot(2,2,1)
plt.title('c1')
plt.imshow(c1,cmap='gray')
plt.subplot(2,2,2)
plt.title('c2')
plt.imshow(c2,cmap='gray')
plt.subplot(2,2,3)
plt.title('c3')
plt.imshow(c3,cmap='gray')
plt.subplot(2,2,4)
plt.title('c4')
plt.imshow(c4,cmap='gray')
b1 = b1+0.5
b2 = b2+0.4
b3 = b3+0.1
c1=np.vstack((a1,b1))
c2=np.vstack((a2,b2))
c3=np.vstack((a3,b3))
c5 = np.hstack((c1,c2,c3,c4))
plt.figure(2)
plt.imshow(c5,cmap='gray')
plt.show()
图片结果显示
通过结果可以看出,当数据为0-1之间的浮点数时,matplotlib.pyplot是按照相对方式进行显示的,也就是数组中的最大值对应白色,最小值对应黑色
采用PIL进行显示
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
a1=np.ones((300,300))*0.1
b1=np.zeros((300,300))
c1=np.vstack((a1,b1))
a2=np.ones((300,300))*0.7
b2=np.zeros((300,300))
c2=np.vstack((a2,b2))
a3=np.ones((300,300))*0.2
b3=np.zeros((300,300))
c3=np.vstack((a3,b3))
a4=np.ones((300,300))*0.3
b4=np.ones((300,300))*0.6
c4=np.vstack((a4,b4))
im1 = Image.fromarray(c1)
im1.show()
im2 = Image.fromarray(c2)
im2.show()
plt.imshow(im1)
plt.show()
图片结果显示
通过结果可以看出,当数据为0-1之间的浮点数时,PIL也是按照绝对方式进行显示的,但是是按照0-255进行数值与颜色的对应的,因为数组中的数值小于1,所以在处理过程中向整数进行近似,显示出来的结果也就都为黑色了
当数据的范围为0-255之间
采用opencv显示
import numpy as np
import cv2
a1=np.ones((300,300))*180
b1=np.zeros((300,300))
c1=np.vstack((a1,b1))
a2=np.ones((300,300))*50
b2=np.zeros((300,300))
c2=np.vstack((a2,b2))
a3=np.ones((300,300))*300
b3=np.zeros((300,300))
c3=np.vstack((a3,b3))
cv2.imshow('cv2 image1',c1)
cv2.imshow('cv2 image2',c2)
cv2.imshow('cv2 image3',c3)
图片结果显示
通过结果可以看出,opencv对于数组中数值超过1的点都对应为白色,即使数值超过255也是对应为白色。
采用matplotlib.pyplot显示
import numpy as np
import matplotlib.pyplot as plt
a1=np.ones((300,300))*180
b1=np.zeros((300,300))
c1=np.vstack((a1,b1))
a2=np.ones((300,300))*80
b2=np.zeros((300,300))+300
c2=np.vstack((a2,b2))
c3 = np.hstack((c1,c2))
plt.figure(1)
plt.subplot(1,2,1)
plt.title('c1')
plt.imshow(c1,cmap='gray')
plt.subplot(1,2,2)
plt.title('c2')
plt.imshow(c2,cmap='gray')
plt.figure(2)
plt.imshow(c3,cmap='gray')
plt.show()
图片结果显示
通过结果可以看出,数组中数值超过1之后,matplotlib.pyplot仍然将数组中最大的值对应为白色,最小值对应为黑色,依然还是按照相对方式进行数值与颜色的对应。
采用PIL进行显示
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
a1=np.ones((300,300))*180
b1=np.zeros((300,300))
c1=np.vstack((a1,b1))
a2=np.ones((300,300))*300
b2=np.zeros((300,300))
c2=np.vstack((a2,b2))
a3=np.ones((300,300))*400
b3=np.zeros((300,300))+100
c3=np.vstack((a3,b3))
im1 = Image.fromarray(c1)
im1.show()
im2 = Image.fromarray(c2)
im2.show()
im3 = Image.fromarray(c3)
im3.show()
plt.imshow(im1)
plt.show()
图片结果显示
通过结果可以看出, PIL是按照绝对方式进行显示的,是按照0-255进行数值与颜色的对应的,在0-255之间会按照灰度来显示,0对应黑色,255对应白色,超过255则对应白色。