工作需求,会用的python来处理图像,把遇到的问题总结,方便学习与复盘
ps:以前没玩过这个,第一次写
1. 对于图像数据的读取
问题概要:在前面copy大神的代码时,他用的是io.imread来读取图像数据,之前用这个读灰度图,没啥问题,换了数据后,变成彩色图。。。。。。
下面是摘自其他大神的博客(文章最后会有原地址)
1、skimage.io.imread
io.imread
读出图片格式是uint8(unsigned int)
;value是numpy array
;图像数据是以RGB
的格式进行存储的,通道值默认范围0-255。
import cv2
import matplotlib.pyplot as plt
from skimage import transform
import numpy as np
import skimage.io as io
train_dir = 'C:\\Users\\Administrator\\代码TRY\\1.jpg'
'''以io.imread方式读取图片'''
# 读图并显示。
image = io.imread(train_dir)
plt.imshow(image)
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/TeFuirnever/article/details/89553708
在另外查的信息中表示使用shape可以看到是个三通道的数据,但在程序中查看时,居然还是单通道(512,640)。并且感觉应该是(640,512),继续查原因。。。。。。
好的吧,原因是在于imshow上面,直接采用imshow,并没有添加显示灰度图相关的参数 cmap='gray',ax1.imshow(im, cmap='gray'),这样就正常了,但不知道为什么之前就是正常的。。。😢
补充:imshow内容
(来自Matplotlib imshow()函数用法总结_im = ax.imshow(scores, cmap='viridis')-CSDN博客)
概述:
Matplotlib中的imshow函数用于绘制热图。(热图:时数据分析常用的方法。通过色差、亮度来展示数据的差异,容易理解)
用法:
imshow(X, cmap=None, norm=None, aspect=None, interpolation=None, alpha=None, vmin=None, vmax=None, origin=None, extent=None, shape=None, filternorm=1, filterrad=4.0, imlim=None, resample=None, url=None, hold=None, data=None, **kwargs)
参数说明:
1.cmap:cmap是colormap的简称,用于指定渐变色,默认的值为viridis。
2.aspect:aspect用于指定热图的单元格的大小,默认值为equal,此时单元格用于是一个方块,当设置为auto时,会根据画布的大小动态调整单元格的大小。
3.alpha:alpha参数用于指定透明度。
4.orign:orign参数指定绘制热图时的方向,默认值为upper此时热图的右上角为(0, 0), 当设置为lower时,热图的左下角为(0,0)。
5.vmin和vmax:用于限定数值的范围,只将vmin和vmax之间的值进行映射。
6.interpolation:参数控制热图的显示形式。
7.extent:extent参数指定热图x轴和y轴的极值。大多数的情况下,我们都不需要自己来手动指定extent参数的值。在绘制热图时,还可以结合xlim和ylim参数,来为热图的周围增加空隙。
2、cv2.imread
cv2.imread
读出的图片格式是uint8
;value是numpy array
;图像数据是以BGR
的格式进行存储的,注意是BGR,通道值默认范围0-255,需要将存储类型改成RGB的形式才能正常显示原图的颜色。
特别是制作tfrecord
时,需要将图片通道改成RGB,具体代码如下:
import cv2
import matplotlib.pyplot as plt
from skimage import transform
import numpy as np
import skimage.io as io
train_dir = 'C:\\Users\\Administrator\\代码TRY\\1.jpg'
'''以cv2方式读取图片'''
image=cv2.imread(train_dir)
# 将图像通道分离开。
b,g,r = cv2.split(image)
# 以RGB的形式重新组合。
rgb_image = cv2.merge([r,g,b])
# 也可以使用这个函数直接转换成RGB形式。
# image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
plt.imshow(rgb_image)
引用(详细内容见原博客):
skimage.io.imread与cv2.imread的区别-CSDN博客
Matplotlib imshow()函数用法总结_im = ax.imshow(scores, cmap='viridis')-CSDN博客