Python数据结果采用不同的可视化形式的区别

当数据的范围为[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则对应白色。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值