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

news2024/11/15 10:09:02

目录

一、图像旋转

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)

输出:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2122365.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决Windows Server 2012加密套件过时的问题

给自己网站加了SSL证书后,发现在360极速浏览器浏览时,会显示加密套件已经过时。一直以为是.cn域名的问题,后面才发现是IIS上面加密套件过时的问题。 TLS/SSL (Schannel SSP) 中的密码套件 - Win32 apps | Microsoft Learn 一开始我以为切换到…

力扣518-零钱兑换 II(Java详细题解)

题目链接:518. 零钱兑换 II - 力扣(LeetCode) 前情提要: 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 最近刚学完背包,所以现在的题解都是以背包问题为基础再来写的。 如果大家不懂背包问题的话&am…

【重点】抓取三次握手的数据报文,分析每次握手的交互过程

1、制造三次握手的报文 三次握手是TCP(传输控制协议)建立连接的过程。它包括以下三个步骤: 1)SYN(同步):客户端发送一个SYN报文,请求与服务器建立连接。 2)SYN-ACK&am…

text2video的step1出错,与纠正

也就是配置RWKV向外提供API访问权;并将openai的api_base改为本地访问地址。 # 设置 OpenAI 的 API 密钥 openai.api_key = "free"#os.getenv(OPENAI_API_KEY) #老版本,过时了,1.2已经不支持了 openai.api_base = "http://127.0.0.1:8000/v1" #在这里设置…

Java入门:08.Java中的static关键字

1 static关键字 可以修饰属性变量,方法和代码段 static修饰的属性称为静态属性或类属性, 在类加载时就在方法区为属性开辟存储空间,无论创建多少个对象,静态属性在内存中只有一份。 可以使用 类名.静态属性 的方式引用 static修饰…

图的基础概念

图和树一样,是一种十分重要的算法思想,是很多算法比如floyd算法,Dijkstra算法等的实现基础 一、节点和边 节点和边是图的基本组成部分,以公交路线图为例,每一个站点相当与图的节点,连接每一个站点的路线相…

【03】深度学习——神经网络原理 | 多层感知机 | 前向传播和反向传播 | 多层感知机代码实现 | 回归问题、分类问题 | 多分类问题代码实现

深度学习 1.神经网络原理1.1神经元模型1.2神经网络结构1.3隐藏层1.3.1激活函数层 1.4输出层1.4.1softmax层 1.5损失函数1.6反向传播 2.多层感知机2.1线性网络的局限性2.2引入非线性2.3多层感知机(Multi-Layer Perceptron,MLP)2.4激活函数&…

卷轴模式系统源码开发在当今时代的多重益处

随着信息技术的飞速发展,数字化转型已成为各行各业不可逆转的趋势。在这一背景下,卷轴模式系统(这里的“卷轴模式”可理解为一种以滚动、分层或模块化展示信息的界面设计方式,类似于古代卷轴展开的过程,但更多地是指其…

2024金砖展 | 蓝卓:“1+2+N”智能企业新架构,赋能全球工业数字化转型

2024金砖国家新工业革命展——工业互联网专题展览作为2024金砖国家新工业革命展聚焦工业互联网的专题展示区域,全面展示工业互联网新技术、新产品、新方案、新应用、新项目、新生态等。 展览时间:2024年9月8日-9月11日 展览地点:厦门国际会展…

FreeRTOS学习记录——持续更新

目录 入门知识: 裸机与FreeRTOS: 裸机: RTOS系统: 基础知识: 任务调度: 分类: 时间片调度: 任务状态(四种): 四种状态图片: 入门知识: …

AV1 Bitstream Decoding Process Specification:术语和定义

原文地址:https://aomediacodec.github.io/av1-spec/av1-spec.pdf没有梯子的下载地址:AV1 Bitstream & Decoding Process Specification摘要:这份文档定义了开放媒体联盟(Alliance for Open Media)AV1视频编解码器…

上海市皮肤病医院引入AcrelEMS-MED平台打造绿色医院

在数字化转型的浪潮中,上海市皮肤病医院再次走在前列,宣布对其能源管理系统进行全面升级,引入AcrelEMS-MED医院能源管理平台,以科技力量推动绿色医院建设,为患者和医护人员打造更加安全、高效、环保的就医与工作环境。…

2024.9.9(极客大挑战 2019]EasySQL,[极客大挑战 2019]Knife)

题目一:极客大挑战 2019]EasySQL 1、点开题目链接,来到下面的界面 2、遇到这样的登录界面,先尝试admin和万能密码(1 or 11#),拿到flag 题目二:[极客大挑战 2019]Knife 1、点开链接&#xff0c…

【C++】模板:进阶(仿函数深度剖析)

目录 一.仿函数的概念 二.仿函数的作用 三.模板的非类型模板参数 四.array 五.模板的特化 六.函数模板 七.类模板 1.全特化 2.偏特化 八.模板分离编译 一.仿函数的概念 仿函数本质就是一个类,此类中重载了运算() ,因此它使用起来就和函数很像&a…

新160个crackme - 053-devilz KeyGen me#3

运行分析 解压出来4个文件运行程序发现要破解Name和Serial PE分析 32位,petite壳 手动脱壳 使用windows XP虚拟机OD打开程序按2下F8,发现ESP变红,根据ESP定律,在该地址右键 -> HW break下断点 继续按2下F9,来到灰色…

从0到1:中小企业如何用内容营销吸引客户,塑造品牌魅力?

今天咱们来聊聊中小企业如何通过内容营销这把“金钥匙”,打开客户的心门,同时塑造出独特的品牌魅力。别紧张,这其实就是一场精彩的交流盛宴,让我们一起探索其中的奥秘吧! 一、内容营销:真诚对话的开始 想象…

OAuth 2.0 授权流程详解与 FastAPI 实现

在现代网络应用中,OAuth 2.0 已成为授权和认证的标准协议。它允许用户将访问权限授予第三方应用,而无需暴露自己的用户名和密码。本文将详细介绍 OAuth 2.0 的常见授权流程,并展示如何在 FastAPI 中实现这些流程。 OAuth 2.0 简介 OAuth 2…

数字化转型不是终点,数字技术服务平台如何陪伴企业持续进化?

数字化转型确实不是终点,而是一个持续的过程,它要求企业不断适应变化、优化流程、创新业务模式。数字技术服务平台在陪伴企业持续进化方面扮演着至关重要的角色,具体体现在以下几个方面: 灵活性与可扩展性:数字技术服…

误删文件后的数据救赎实战恢复指南

误删文件的痛与思 在数字化时代,数据已成为我们生活与工作中不可或缺的一部分。无论是个人用户保存的家庭照片、工作文档,还是企业用户存储的财务数据、客户资料,都承载着无法估量的价值。然而,误删文件这一简单却致命的操作&…

【数组与广义表】(基本概念与思路)

1.数组的定义及特点 数组:按一定格式排列起来的,具有相同类型的数据元素的集合。 1.1一维数组 若线性表中的数据元素为非结构的简单元素,则称为一维数组。一维数组的逻辑结构:线性结构,定长的线性表声明格式:数据类型 变量名称…