一、CV2
OpenCV只能操作np.array格式的图像im [x1 y1 x2 y2] 左上角 + 右下角
1.1、cv2.rectangle
在im上画出框框
cv2.rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)
参数:
- img: 要绘制的图像
- pt1: 矩形的左上角坐标 / 左下角坐标
- pt2: 矩形的右下角坐标 / 右上角坐标 ( p1和p2一定要相对)
- color: 矩形边框或者填充的颜色/亮度
- thickness: 矩形边框的粗细。负值表示使用 color 填充整个矩形
- lineType:矩形边框的线型
- shift:坐标中的小数位数
返回:无
1.2、cv2.getTextSize
返回文本 label 的宽高 (width, height)
retval, baseLine = cv2.getTextSize(text, fontFace, fontScale, thickness)
参数:
- text: 要计算的文本 label
- fontFace: 要使用的字体 经常用0
- fontScale: 乘以特定字体基本大小的比例因子 字体缩放系数
- thickness: 文本的线的粗细
返回:
- retval:字体的宽高 (width, height)
- baseLine :相对于最底端文本的 y 坐标
1.3、cv2.putText
在图片上写文本
putText(img, text, org, fontFace, fontScale, color, thickness=None, lineType=None, bottomLeftOrigin=None)
参数:
- img:要绘制的图像
- text: 要写上前的label信息 + score
- org:文本左下角坐标
- fontFace:要使用的字体 经常用0
- fontScale:乘以特定字体基本大小的比例因子 字体缩放系数
- color:字体的颜色
- thickness:字体的线的粗细
- lineType:矩形边框的线型
1.4、cv2.imwrite
cv2.imwrite(file,img,num)
参数:
- file:要保存的文件名
- img:要保存的图像 一般是RGB格式 cv2.cvtColor(mosaic, cv2.COLOR_BGR2RGB)
- num:它针对特定的格式:对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95;对于png ,第三个参数表示的是压缩级别。默认为3. 【可选参数 一般不怎么用】
二、Image、ImageDraw、ImageFont
ImageDraw只能操作Image格式的图像im [x1 y1 x2 y2] 左上角 + 右下角
im = Image.fromarray(im) 将im从np.array格式 -> Image格式
im = np.asarray(im) 将im从Image格式 -> np.array格式
draw = ImageDraw.Draw(im)
(初始化)创建一个可以在给定图像(im)上绘图的对象,在之后调用draw.函数的时候不需要传入im参数,它是直接针对im上进行绘画的
font = ImageFont.truetype(“Arial.ttf”, size=max(round(max(im.size) / 40), 12))
加载一个TrueType或者OpenType字体文件(“Arial.ttf”), 并且创建一个字体对象font, font写出的字体大小size=12
2.1、draw.rectangle
rectangle(self, xy, fill=None, outline=None, width=1)
参数:
- xy:box [x1 y1 x2 y2] 左上角 + 右下角
- fill:将整个矩形填充颜色color
- outline:矩形外框颜色color
- width: 线宽
返回:None
2.2、font.getsize
txt_width, txt_height = font.getsize(label)
返回给定文本label的宽度txt_width和高度txt_height
2.3、draw.text
draw.text(xy , text, fill, font=font)
xy: 左上角坐标
label:显示的文本信息
fill: 文本的颜色
font:文本字体
2.4、Image.save
Image.fromarray(img).save(fname)
保存之前必须将图片img从numpy array格式转为tensor格式,fname为保存的文件名
三、matplotlib.pyplot
import matplotlib.pyplot as plt
3.1、plt.figure
创建自定义图像 初始化画布
fig = plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)
参数:
- num:图像编号或名称,数字为编号 ,字符串为名称 (不怎么用)
- figsize:figure的宽和高 单位为英寸 (重要)
- dpi:参数指定绘图对象的分辨率 (不怎么用)
- facecolor:背景颜色
- edgecolor:边框颜色
- frameon:是否显示边框
- tight_layout:当发生轴标签、标题、刻度标签等等超出图形区域,是否自动调整子图参数,使之填充整个图像区域
fig.savefig(‘comparison.png’, dpi=200) plt绘完图,fig.savefig()保存图片
3.2、plt.plot
绘制折线图 可以任意加几条线
plt.plot(x, y, format_string,**kwargs)
参数:
- x: x坐标
- y: y坐标
- format_string:曲线显示类型 如’.-’
如:plt.plot(x, ya, ‘.-’, label=‘YOLOv3’)
也可以同时在一个图上画几个散点图,加上:
plt.plot(x, yb ** 2, ‘.-’, label=‘YOLOv5 ^2’)
plt.plot(x, yb ** 1.6, ‘.-’, label=‘YOLOv5 ^1.6’)
3.3、plt.xlim、 plt.ylim
设置x轴、y轴范围
如:plt.xlim(left=-4, right=4) 和 plt.ylim(bottom=0, top=6)
3.4、plt.xlabel、plt.ylabel
设置x轴、y轴标签
如:plt.xlabel(‘input’)、plt.ylabel(‘output’)
3.5、plt.grid()
生成网格 如plt.grid()
3.6、plt.legend
加上图例 如果是折线图,需要在plt.plot中加入label参数((图例名))如:
plt.plot(x, ya, ‘.-’, label=‘YOLOv3’)
…
plt.legend()
3.7、 plt.savefig
plt.savefig(Path(save_dir) / ‘LR.png’, dpi=200)
3.8、plt.subplots
fig, ax = plt.subplots(2, 2, figsize=(6, 6), tight_layout=True)
在figure上创建2行2列的子图
figure 的 size 是(6,6)
tight_layout=True:会自动调整子图参数, 使之填充整个图像区域
返回fig:绘图对象 ax :坐标对象
ax.set_aspect(‘equal’) # 设置两个轴的长度始终相同 figure为正方形
ax = ax.ravel() # 将多维数组降位一维
ax[0].plot(x, y, marker=’.’, linewidth=2, markersize=8) # 画子图 折现图
ax[i].set_title(s[i]) # 设置子图标题
3.9、直方图
ax.hist2d(cx, cy, bins=600, cmax=10, cmin=0)
双直方图 cx: x坐标
cy: y坐标
bins: 横竖分为几条
cmax、cmin: 所有的bins的值少于cmin和大于cmax的不显示
ax[0].hist(cx, bins=600)
正常直方图 cx: 绘图数据
bins: 直方图的长条形数目
normed: 是否将得到的直方图向量归一化
facecolor: 长条形的颜色
edgecolor:长条形边框的颜色
alpha:透明度
使用np画直方图:
hist, xedges, yedges = np.histogram2d(x, y, (xedges, yedges))
x: x轴坐标
y: y轴坐标
(xedges, yedges): bins x, y轴的长条形数目
返回:
hist: 直方图对象
xedges: x轴对象
edges: y轴对象
使用:hist[xidx, yidx]
3.10、plt.scatter 散点图
plt.scatter(y, f, c=hist2d(y, f, 20), cmap=‘viridis’, alpha=.8, edgecolors=‘none’)
x, y: x y 坐标列表
c: 色彩或颜色
cmap: Colormap实例
edgecolors: 边框颜色
四、pandas、seaborn
4.1、pd.DataFrame
x = pd.DataFrame(b, columns=[‘x’, ‘y’, ‘width’, ‘height’])
创建DataFrame, 类似于一种excel,表头是[‘x’, ‘y’, ‘width’, ‘height’] 表数据是b
4.2、seaborn.pairplot: 联合分布图
用于绘制多变量联合分布图: 查看两个或两个以上变量之间两两相互关系的可视化形式
需要和pd.DataFrame联合使用:
x = pd.DataFrame(b.transpose(), columns=[‘x’, ‘y’, ‘width’, ‘height’])
sn.pairplot(x, corner=True, diag_kind=‘auto’, kind=‘hist’, diag_kws=dict(bins=50), plot_kws=dict(pmax=0.9))
data = x是联合分布数据
corner = True 表示只显示左下侧 因为左下和右上是重复的
diag_kind:表示联合分布图中对角线图的类型
kind:表示联合分布图中非对角线图的类型
plot_kws,diag_kws: 可以接受字典的参数,对图形进行微调
4.3、seanborn.heatmap: 热力图
热力图(heatmap)可通过颜色深浅变化,优雅的展示数据的差异
参数:
data: 数据矩阵;
annot: 为True时为每个单元格写入数据值 False用颜色深浅表示;
annot_kws: 格子外框宽度;
fmt: 添加注释时要使用的字符串格式代码;
cmap: 指色彩颜色的选择;
square: 是否是正方形;
xticklabels、yticklabels: xy标签;