python 读取显示保存图片,在图片上添加 矩形框 & 文字。三种方案:matplotlib.pyplot、cv2、PIL-Image

opencv

import cv2
import numpy as np
img = cv2.imread('touxiang.jpg',cv2.IMREAD_GRAYSCALE)
size = img.shape  # [w,h,c]  
cv2.imshow('figure_name', img)# 第一个参数是窗口名称。第二个参数是图片

# 绘制矩形
cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) 
# pt1:左上角坐标, pt2:右下角坐标
# color:线条颜色,如 (255, 0, 255) 蓝色,BGR
# thickness:线条宽度(int)

# 添加文本
cv2.putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]])
#text:要绘制的文字, org:文字在图像中的左下角坐标
# fontFace:字体, fontScale:字体大小,该值和基础大小相乘得到字体大小
# color:文字颜色, thickness:字体线条宽度
# bottomLeftOrigin:为 true,图像数据原点在左下角;否则,图像数据原点在左上角

cv2.waitKey(0) #等待用户的按键事件
cv2.destroyAllWindows()

opencv使用的BGR模式。matplotlib使用RGB模式。因此,在使用matplotlib显示cv2读取的图像,会导致颜色错误,故需要之前先要做一下图像颜色的转换cv2.cvtColor(img,cv2.COLOR_BGR2RGB)就可以正常显示。

matplotlib

一般常用来plot,surf 等来 绘制图像,而不是显示图像。

import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt

x0,x1,y0,y1=[1,1,5,5]
fig = plt.figure()
ax = plt.axis('on') # 关掉坐标轴为 off
plt.title('title') # 图像标题

plt.subplot(211)  # 划分子图,2行1列,第一个图
img = plt.imread('图片路径')  
plt.imshow(img) 
 
upleft = (x0, y0)
width = x1-x0
height = y1-y0

# patches添加轴句柄,不是figure
rect = patches.Rectangle(upleft, width, height, linewidth=0.3, edgecolor='r', facecolor='none') # facecolor:填充颜色
ax.add_patch(rect) 
plt.show()
plt.savefig('./test.jpg') # 保存图像到test.jpg

PIL

from PIL import Image,ImageDraw
import matplotlib.pyplot as plt
x1, y1, x2, y2 = 111010
img=Image.open('d:/dog.png')#显示图像
img.show()
print(img.size) # 图像尺寸
# 绘制矩形
draw = ImageDraw.Draw(img) 
draw = ImageDraw.Draw(img)
#矩形 左上坐标和 右下角坐标,后面是制定颜色RGB,红色
draw.rectangle([x1, y1, x2, y2], outline=(255, 0, 0),width=2)

#在左上角添加红色文字 ship
draw.text([x1, y1], 'ship', (255, 0, 0))

img.show() #显示
img.save('图片保存路径/xxx.jpg')

参考:https://www.jianshu.com/p/e8d058767dfa

你可能感兴趣的:(python函数基础)