Python-OpenCV-图像更改、角点检测、模板匹配

图像更改

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)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值