图像更改
OpenCV可以描绘线、矩形、圆圈和文本等,通过读入图像,再进行更改,最后保存,可以实现图像的更改。
img=cv2.imread('1.jpg')
# 画一条线
'''
(300, 200)和(400, 300)为两个端点,注意(列,行);
(255, 0, 0)为选取的颜色;
2为厚度(几个像素)
'''
cv2.line(img, (300, 200), (400, 300), (255, 0, 0), 2)
# 画一个矩形
'''
(0, 100)和(50, 150)为两个对角线端点;
(0, 255, 0)为选取的颜色;
2为厚度(几个像素)
'''
cv2.rectangle(img, (0, 100), (50, 150), (0, 255, 0), 2)
# 画一个矩形
'''
(50, 100)为圆心;
20为半径;
(0, 0, 255)为选取的颜色;
3为厚度(几个像素)
'''
cv2.circle(img, (50, 100), 20, (0, 0, 255), 3)
# 写文本
'''
"HELLO"为要写的文本;
(400, 50)为文本起始位置;
cv2.FONT_HERSHEY_SIMPLEX为文本字体类型;
1为原比例大小;
(0,0,0)为选取的颜色;
2个像素厚度;
'''
cv2.putText(img, "HELLO", (400, 50),cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,0), 2)
角点检测
角点是在图像中一些存在物体边缘角落位置的点或者特殊位置的点,角点检测是计算机视觉系统中获取图像特征的一种方法,是运动检测、图像匹配、视频跟踪、三维重建和目标识别的基础。
# 先转成灰度图
img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 提取特征
# 500为角点数目最大值;0.1为角点的品质因子;10为两个角点之间最短欧式距离
corners = cv2.goodFeaturesToTrack(img_gray, 500, 0.1, 10)
# 处理角点,使用红色实心圆(像素厚度为-1)标记
for corner in corners:
x, y = corner.ravel()
cv2.circle(img, (int(x), int(y)), 3, (255, 0, 255), -1)
模板匹配
通过模板可以实现匹配多个相似的图像内容,提取多个相同特征。
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 选取模板
template = img_gray[70:95, 150:180]
# 用模板对图像进行匹配
# cv2.TM_CCOEFF_NORMED为匹配算法
match = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)
# 找出匹配系数大于0.9的对应位置(数组x和数组y)
locations = np.where(match >= 0.9)
# 模板图案的长和宽
w, h = template.shape[0:2]
# 用矩形标记匹配的图像
for p in zip(*locations):
x1, y1 = p[1], p[0]
x2, y2 = x1 + w, y1 + h
cv2.rectangle(img, (x1, y1), (x2, y2), (255,0, 0), 1)