cv2.imread(filename[, flags])
以读取一张tif图片为例:
img="D:\\***.tif"
data2=cv2.imread(img,2)
opencv 官方文献中给出的不同flags代表的读取类型,如下:
filename – Name of file to be loaded.
flags –
Flags specifying the color type of a loaded image:
◦>0 Return a 3-channel color image
◦=0 Return a grayscale image
◦<0 Return the loaded image as is. Note that in the current implementation the alpha channel, if any, is stripped from the output image. For example, a 4-channel RGBA image is loaded as RGB if flags\ge0 .
另外,opencv中imread第二个参数的含义对不同的flags值进行了测试:
- flag=-1,8位深度,原通道
- flag=0, 8位深度,1通道
- flag=1, 8位深度,3通道
- flag=2, 原深度, 1通道
- flag=3, 原深度, 3通道
- flag=4, 8位深度,3通道
PIL.Image.open(fp, mode='r', formats=None)
示例:
from PIL import Image
im = Image.open('lena.jpg')
# im.show()
im_array = np.asarray(im)
可以看出,相比cv2.imread()
在有些情况下需要设置一些参数,使用PIL.Image读取图片是很方便的。同时使用 np.asarray()
可以很方便地将其转为np.array格式,以进行后续数据处理。
matplotlib.image.imread(fname, format=None)
参数:
fnamestr:文件名/url地址等
formatstr:文件格式('png', 'pdf', 'svg'等)
如果不设置,自动通过文件名获取;获取不了的话,默认为"PNG"。
返回值:格式为numpy.array
(M, N) for grayscale images.
(M, N, 3) for RGB images.
(M, N, 4) for RGBA images.
例子:
import matplotlib.image as mpimg
img= mpimg.imread('1.jpg')
Image.save(fp, format=None, **params)
cv2.imwrite(filename, image[, params])
params中给出的是图像保存的特定类型(图像质量,压缩级别之类),一般应该也不需要~
cv2.imwrite(f"D:\\2.tif",data.astype(np.uint16))
注意:数据类型要设置为整型;若有小于0的值,应进行处理,否则会产生溢出。
首先通过Image.fromarray()
将数据转成 PIL image,然后再进行保存。
im = Image.fromarray(im_array)
im.save('1.png')
savefig(fname, dpi=None, facecolor='w', edgecolor='w',
orientation='portrait', papertype=None, format=None,
transparent=False, bbox_inches=None, pad_inches=0.1,
frameon=None, metadata=None)
以lena女神为例:
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
lena = mpimg.imread('lena.jpg')
plt.imshow(lena)
plt.axis('off')
plt.savefig("lena_1.jpg")
plt.show()
但是需要注意的是,plt主要作用还是显示数据结果,因此它保存的数据会带上坐标轴/空白等,在保存正常的图片时,不建议使用。
例如,将数据data保存到 1.txt。
注意:需要将数据类型设置为“str”,才能进行write。
res=open(r'D:\\1.txt','w')
res.write(str(data))
res.close()
numpy.savetxt("XXX.txt", data , fmt='%.18e', delimiter=' ', ...)
设有下列表格数据,将其保存成csv文件。
city people gdp
BJ 2300 1200
SH 2400 1300
SZ 1900 1100
GZ 2200 1000
首先将数据保存到python list变量中。
column=["city","people","gdp"]
content=[]
content.append(["BJ","2300","1200"])
content.append(["SH","2400","1300"])
content.append(["SZ","1900","1100"])
content.append(["GZ","2200","1000"])
res=",".join(column)+'\n'
for item in content:
res+=",".join(item)+'\n'
f=open('D://stat.csv','w')
f.write(res)
f.close()
CSV英文全称为:Comma-Separated Values,逗号分隔值。
在计算机里默认是','
分隔的(如果想修改,可参考如何修改CSV文件的分隔符)。
如果写成'\t'
之内,保存格式会有问题。
import pandas as pd
tbl=pd.DataFrame(data=content,columns=column)
tbl.to_csv("D://stats.csv")
此时保存的文件内容为:
如果不想显示左侧一列,即index列:
最后一个语句可修改为:
tbl.to_csv("stats.csv",index=False)
tbl.to_csv("stats.csv",index=False,header=None)
import pandas as pd
df = pd.DataFrame()
inds=range(5)
pic_names=[f'{chr(97+i)}.jpg' for i in inds]
keys=["序号","名称"]
contents=[inds,pic_names]
for i in range(len(keys)):
df[keys[i]]=pd.Series(contents[i])
df.to_excel("图片.xlsx", sheet_name="sheet1", index=False, header=True)
print(df)
输出内容为:
这种方法是把表格中的内容先整体保存,再赋值保存。
with open(file,'r') as f:
for line in f.readlines():
*******
f.close()
使用numpy一键读取,很是方便。
numpy.loadtxt("XXX.txt", dtype=<class 'float'>, delimiter=' ', skiprows=0, usecols=None, ...)
[1] opencv cv2 imread
[2] Python3 File(文件) 方法
[3] numpy 保存 csv 文件