引言
对图像做了一个RGB-> LAB ,再转RGB的一个转换。转换后用plt画图时,发现显示出来的图像,和保存下来的图像,颜色显示不太一致。最开始还以为是电脑的问题,但是转用OpenCV画图时,直接报错了。查阅资料才发现,这个是跟图像矩阵中的数据类型有关。
程序
1. OpenCV
程序:
图像显示程序为:
cv2.imshow("image",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果:
python报错为:
>>> (-215:Assertion failed) dst.data == (uchar*)dst_ptr in function 'cvShowImage'
原因分析:
OpenCV画图中,只支持uint8的数据类型。 因此,若图像矩阵数据类型不为uint8
,需要再画图前转换。
改进:
数据类型转换代码为(两种类型):
data = np.array(data,dtype='uint8') # 第一种
data = np.uint8(data) # 第二种
2. plt
程序:
plt画图程序为:
img_plt = cv2.cvtColor(img_RGB,cv2.COLOR_BGR2RGB) # cv2转plt画图
plt.imshow(img_plt, 'gray')
plt.title('img_solar')
plt.show()
结果:
用plt 画图时,程序并不会报错,只是显示出的图像,和原本的图像像素值不一致。
修改:
同样,在画图前,调用数据类型转换代码。
数据类型转换代码为(两种类型):
data = np.array(data,dtype='uint8') # 第一种
data = np.uint8(data) # 第二种
参考资料
- https://blog.csdn.net/jacke121/article/details/87723912
- https://blog.csdn.net/fsgongzi/article/details/88788557