机器学习:opencv--图像旋转、模版匹配多项

目录

一、图像旋转

1.numpy方法

2.opencv方法

二、模版匹配多项

1.完整代码

2.步骤解析

3.结果

三、图像旋转+模版匹配


一、图像旋转

  • 图像旋转有两种方式

1.numpy方法

import cv2
import numpy as np

img = cv2.imread('suda.jpg')
img = cv2.resize(img, (300, 300))

# np方法
rotated_image1 = np.rot90(img, k=-1) # 旋转 90 度,k=-1 表示顺时针旋转 90 度
rotated_image1 = np.rot90(rotated_image1, k=-1)  # 两次旋转90度 即180度
rotated_image2 = np.rot90(img, k=1) # 旋转 90 度,k=1 表示逆时针旋转 90 度

cv2.imshow('yuantu', img)
cv2.imshow('rotated_imagel', rotated_image1)
cv2.imshow('rotated_image2', rotated_image2)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出:

  • 左边是原图,中间是旋转180的图像,右边是逆时针旋转90度的图像

 

2.opencv方法

import cv2
import numpy as np

img = cv2.imread('suda.jpg')
img = cv2.resize(img, (300, 300))

# opencv方法
rotated_image = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)  # 顺时针90度
rotated_image1 = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)  # 逆时针90度
rotated_image2 = cv2.rotate(img, cv2.ROTATE_180)  # 旋转180度

cv2.imshow('shun90', rotated_image)
cv2.imshow('ni90', rotated_image1)
cv2.imshow('180', rotated_image2)
cv2.waitKey(0)

输出:

  • 左边是顺时针90度的图像,中间是逆时针90度的图像,右边是180度的图像

 

二、模版匹配多项

1.完整代码

import cv2
import numpy as np

img_rgb = cv2.imread('pic.jpg')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
moban = cv2.imread('moban.jpg', 0)
h, w = moban.shape[:2]
# 使用模板匹配方法 cv2.matchTemplate 进行模板匹配
res = cv2.matchTemplate(img_gray, moban, cv2.TM_CCOEFF_NORMED)  # TM_CCOEFF_NORMED 归一化相关系数匹配法,数值越大表明匹配程度越好。
# 设定匹配阈值
threshold = 0.95
# 获取匹配结果中所有符合闽值的点的坐标
loc = np.where(res >= threshold)  # ([y],[x])
# 遍历所有匹配点
for pt in zip(*loc[::-1]):  # pt为(x,y)
    # 在原图上绘制匹配区域的矩形
    cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0, 0, 255), 1)
cv2.imshow('res.png', img_rgb)
cv2.waitKey(0)

 

2.步骤解析

  • 模版匹配跟之前步骤一样,
    • 使用cv2.matchTemplate()方法进行模版匹配
    • 返回每一个像素点的匹配度的矩阵
  • 模版匹配多项里加了一个阈值
    • 取出矩阵中匹配度大于阈值的像素点
    • 然后绘制出符合条件的每一个像素点的矩形区域
    • 最后叠加出来的图像就是模版匹配多项的结果

 

3.结果

  • 一次匹配了图像中的两个部分

 

三、图像旋转+模版匹配

  • 这里将模版匹配多项写进了pp函数里,方便重复使用
  • 然后只需将图像旋转几次即可
  • 选用上面两种方法的哪种都可以
import cv2
import numpy as np

img_rgb = cv2.imread('pic.jpg')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)


def pp(moban):
    # moban = cv2.imread('m.png', 0)
    h, w = moban.shape[:2]
    # 使用模板匹配方法 cv2.matchTemplate 进行模板匹配
    res = cv2.matchTemplate(img_gray, moban, cv2.TM_CCOEFF_NORMED)  # TM_CCOEFF_NORMED 归一化相关系数匹配法,数值越大表明匹配程度越好。
    # 设定匹配阈值
    threshold = 0.9
    # 获取匹配结果中所有符合闽值的点的坐标
    loc = np.where(res >= threshold)  # 二元组 ([y],[x])
    # 遍历所有匹配点
    for pt in zip(*loc[::-1]):  # 将loc逆序,将元组解包为两个列表,再zip配对 pt为(x,y)
        # 在原图上绘制匹配区域的矩形柜
        cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0, 0, 255), 1)
    cv2.imshow('res.png', img_rgb)
    cv2.waitKey(0)


moban = cv2.imread('moban.jpg', 0)
moban1 = cv2.rotate(moban, cv2.ROTATE_90_CLOCKWISE)  # 顺时针旋转90度
moban2 = cv2.rotate(moban, cv2.ROTATE_90_COUNTERCLOCKWISE)  # 逆时针旋转90度
# moban3 = cv2.rotate(moban, cv2.ROTATE_180)  # 旋转180度
pp(moban)
pp(moban1)
pp(moban2)
# pp(moban3)

输出:

  • 各个方向的箭头都匹配到了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃什么芹菜卷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值