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 pltx0,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 = 1,1,10,10
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