OpenCV实战(OCR识别和高级基础)

news2024/11/15 11:09:23

目录

  • 图像特征
    • harris角点检测
      • 基本原理
      • 实现
    • Scale Invariant Feature Transform(SIFT)
      • 图像尺度空间
      • 多分辨率金字塔
      • 高斯差分金字塔(DOG)
      • DoG空间极值检测
      • 关键点的精确定位
      • 消除边界响应
      • 特征点的主方向
      • 生成特征描述
    • 特征匹配
      • Brute-Force蛮力匹配
      • 1对1的匹配
      • k对最佳匹配
      • 随机抽样一致算法(Random sample consensus,RANSAC)
      • 单应性矩阵

图像特征

harris角点检测

在这里插入图片描述
角点:无论沿水平还是竖直方向移动,灰度级都会发生变化,并且这个变化是迅速的
边界:只有一个方向移动灰度级是迅速的,另一个方向是缓慢的

基本原理

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实现

cv2.cornerHarris()

  • img: 数据类型为 float32 的入图像
  • blockSize: 角点检测中指定区域的大小
  • ksize: Sobel求导中使用的窗口大小
  • k: 取值参数为 [0,04,0.06]
import cv2 
import numpy as np
def cv_show(img,name):
    cv2.imshow(name,img)
    cv2.waitKey()
    cv2.destroyAllWindows()
    cv2.waitKey(1)
    
img = cv2.imread('./汪学长的随堂资料/7/07and08 OpenCV_高级基础和多个项目实战/高级基础知识/test_1.jpg')
print ('img.shape:',img.shape)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# gray = np.float32(gray)
dst = cv2.cornerHarris(gray, 2, 3, 0.04)
print ('dst.shape:',dst.shape)

在这里插入图片描述

img[dst>0.01*dst.max()]=[0,0,255]
cv_show(img,'dst')

在这里插入图片描述

Scale Invariant Feature Transform(SIFT)

图像尺度空间

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

多分辨率金字塔

在这里插入图片描述

高斯差分金字塔(DOG)

在这里插入图片描述
在这里插入图片描述

DoG空间极值检测

为了寻找尺度空间的极值点,每个像素点要和其图像域(同一尺度空间)和尺度域(相邻的尺度空间)的所有相邻点进行比较,当其大于(或者小于)所有相邻点时,该点就是极值点。如下图所示,中间的检测点要和其所在图像的3×3邻域8个像素点,以及其相邻的上下两层的3×3领域18个像素点,共26个像素点进行比较。
在这里插入图片描述

关键点的精确定位

这些候选关键点是DOG空间的局部极值点,而且这些极值点均为离散的点,精确定位极值点的一种方法是,对尺度空间DoG函数进行曲线拟合,计算其极值点,从而实现关键点的精确定位。
在这里插入图片描述

消除边界响应

在这里插入图片描述

特征点的主方向

在这里插入图片描述
每个特征点可以得到三个信息(x,y,σ,θ),即位置、尺度和方向。具有多个方向的关键点可以被复制成多份,然后将方向值分别赋给复制后的特征点,一个特征点就产生了多个坐标、尺度相等,但是方向不同的特征点。

生成特征描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import cv2
import numpy as np

def cv_show(img,name):
    cv2.imshow(name,img)
    cv2.waitKey()
    cv2.destroyAllWindows()
    cv2.waitKey(1) # MacOS函数
    
img = cv2.imread('./汪学长的随堂资料/7/07and08 OpenCV_高级基础和多个项目实战/高级基础知识/test_1.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

得到特征点

sift = cv2.xfeatures2d.SIFT_create()
kp = sift.detect(gray, None)
img = cv2.drawKeypoints(gray, kp, img)

cv_show(img,'drawKeypoints')

在这里插入图片描述
计算特征

kp, des = sift.compute(gray, kp)

des是每个关键点的特征

print (np.array(kp).shape)

在这里插入图片描述

des.shape

在这里插入图片描述

特征匹配

Brute-Force蛮力匹配

import cv2 
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
img1 = cv2.imread('./汪学长的随堂资料/7/07and08 OpenCV_高级基础和多个项目实战/高级基础知识/box.png', 0)
img2 = cv2.imread('./汪学长的随堂资料/7/07and08 OpenCV_高级基础和多个项目实战/高级基础知识/box_in_scene.png', 0)
cv_show('img1',img1)

在这里插入图片描述

cv_show('img2',img2)

在这里插入图片描述

sift = cv2.xfeatures2d.SIFT_create()
kp1, des1 = sift.detectAndCompute(img1, None)
kp2, des2 = sift.detectAndCompute(img2, None)
# crossCheck表示两个特征点要互相匹,例如A中的第i个特征点与B中的第j个特征点最近的,并且B中的第j个特征点到A中的第i个特征点也是 
#NORM_L2: 归一化数组的(欧几里德距离),如果其他特征计算方法需要考虑不同的匹配计算方式
bf = cv2.BFMatcher(crossCheck=True)

1对1的匹配

matches = bf.match(des1, des2)
matches = sorted(matches, key=lambda x: x.distance)
img3 = cv2.drawMatches(img1, kp1, img2, kp2, matches[:10], None,flags=2)
cv_show('img3',img3)

在这里插入图片描述

k对最佳匹配

bf = cv2.BFMatcher()
matches = bf.knnMatch(des1, des2, k=2)
good = []
for m, n in matches:
    if m.distance < 0.75 * n.distance:
        good.append([m])
img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,None,flags=2)
cv_show('img3',img3)

在这里插入图片描述

随机抽样一致算法(Random sample consensus,RANSAC)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

单应性矩阵

在这里插入图片描述

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

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

相关文章

Linux命令200例:crontab详解及应用场景(常用)

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…

视频智能分析/视频云存储/集中存储EasyCVR平台AI分析告警列表定制

安防监控视频集中存储/云存储EasyCVR视频汇聚平台基于云边端一体化架构&#xff0c;可支持多协议、多类型设备接入&#xff0c;视频监控综合管理平台具有强大的数据接入、处理及分发能力&#xff0c;能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、…

Effective C++学习笔记(7)

目录 条款41&#xff1a;了解隐式接口和编译多态条款42&#xff1a;了解typename的双重意义条款43&#xff1a;学习处理模板化基类内的名称条款44&#xff1a;将与参数无关的代码抽离templates条款45&#xff1a;运用成员函数模板接受所有兼容类型条款46&#xff1a;需要类型转…

100. 相同的树

100. 相同的树 题目-简单难度示例1. dfs2. bfs 题目-简单难度 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 示例 1&#xff1a; 输入…

Stable Diffusion XL(SDXL)原理详解

技术报告&#xff1a;SDXL: Improving Latent Diffusion Models for High-Resolution Image Synthesis 官方代码&#xff1a;Stability-AI-generative-models 模型权重&#xff1a;HuggingFace-Stability AI 非官方代码&#xff1a;Linaqruf/kohya-trainer diffuser库&#xf…

Redis实战:Redis的安装及简单使用

本片将介绍 Redis 的安装及简单使用 文章目录 1、Redis安装1.1、Windows下Redis的安装1.2、Linux下Redis的安装1.3、Mac下Redis的安装&#xff08;使用Homebrew&#xff09; 2、Redis使用2.1、启动服务端客户端2.2、Redis简单命令 3、Redis命令大全 1、Redis安装 1.1、Windows…

Redis持久化——AOF

介绍 Redis是运行在内存中的数据库&#xff0c;当我们关闭了Redis服务器后&#xff0c;内存中的数据会丢失吗&#xff1f; 答案是不会的&#xff0c;因为Redis有持久化功能&#xff0c;能够将内存中的数据保存到磁盘中的文件&#xff0c;以此来实现数据的永久保存。 在Redis中…

Spring Clould 消息队列 - RabbitMQ

视频地址&#xff1a;微服务&#xff08;SpringCloudRabbitMQDockerRedis搜索分布式&#xff09; 初识MQ-同步通讯的优缺点&#xff08;P61&#xff0c;P62&#xff09; 同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&…

步入React正殿 - React组件设计模式

目录 扩展学习资料 高阶组件 /src/components/hoc/withTooltip.js /src/components/hoc/itemA.jsx /src/components/hoc/itemB.jsx /src/App.js 函数作为子组件【Render pprops】 函数作为子组件 /src/components/rp/itemC.jsx【父组件】 /src/components/rp/withToo…

特朗普钱包中持有的以太坊价值高达 500 万美元

根据华盛顿公民责任与道德组织最新发布的经认证的《2023年财务披露信息》&#xff0c;美国前总统唐纳德特朗普持有的以太坊价值高达500万美元。其中&#xff0c;详细条目特别列出了280万美元的收入。此外&#xff0c;特朗普还从NFT INT LLC的NFT授权许可协议中赚取了490万美元。…

Ubuntu系统录屏软件SimpleScreenRecorder安装及使用教程,三分钟学会!

背景&#xff1a;在ubuntu系统调程序时&#xff0c;有时需要录制实验视频&#xff0c;如gazebo仿真环境中机械臂的抓取视频。windows系统最好用的录屏软件非EV录屏莫属&#xff0c;而ubunutu系统下为我觉得SimpleScreenRecorder就很好用&#xff0c;下面介绍SimpleScreenRecord…

【COMP282 LEC1 and LEC2】

LEC 1 1. Printf 在C中的写法 2. Header file 1. 不能写 “.h” 2. strlen变成.size() 3. Namespace 前面用了“using namespace std;” 后面就可以直接写cout 不用写std::cout了 4. Input 就是input是std::cin >> LEC 2 1. Classes 2. 3 access modifiers in C …

美国FDA医疗器械分类目录数据库查询

最近我们在接到FDA医疗器械咨询项目时&#xff0c;经常收到客户关于公司产品在美国FDA医疗器械认证中或是国内所属的产品类别以及如何查询产品分类的疑问。在这里&#xff0c;我将为大家解答这些问题&#xff0c;希望能够提供帮助&#xff01; 美国FDA医疗器械产品目录中包含了…

Python Opencv实践 - 图像均值滤波

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR) print(img.shape) pixel_count img.shape[0] * img.shape[1] print(pixel_count)#为图像添加椒盐噪声 #参考资料&#xf…

JAVA调用外部电商API的详情步骤和注意事项

在现代电商生态中&#xff0c;电商API的使用变得越来越普遍。本文将为您详细介绍如何使用JAVA语言调用外部电商API的步骤&#xff0c;并提供一些在开发过程中需要特别注意的事项。希望通过本文的阐述&#xff0c;读者能够对JAVA调用外部电商API有一个全面的了解。 关键词&…

unity发布WebGL遇到的坑(持续更新)

1、unity默认字体在网页中不会显示 解决方法&#xff1a;自己新导入一个字体&#xff0c;使用导入的字体 2、之前打过包并运行过&#xff0c;后面又在unity中进行了修改&#xff0c;重新打包&#xff0c;运行发现还是修改之前的效果&#xff0c;虽然是新包&#xff0c; 解决方…

VTK vtkOBBTree 有向包围盒

vtkOBBTree 有向包围盒 vtkOBBTree是一个包围盒的树&#xff0c;它将体的每个cell分割到每个小的包围盒中&#xff0c;由SetNumberOfBuckets确定每个盒中放多少个 Cell。建立一个vtkOBBTree要先设定DataSet,SetDataSet。然后调用BuildLocator。包围盒精细程度由递归深度 (Max…

Linux问题--docker启动mysql时提示3306端口被占用

问题描述&#xff1a; 解决方法&#xff1a; 1.如果需要kill掉mysqld服务可以先通过 lsof -i :3306 2. 查询到占用3306的PID&#xff0c;随后使用 kill -15 PID 来kill掉mysqld服务。 最后结果

JDK 20下载与安装 (Windows 11系统)

JDK(Java Development Kit)是 Java 语言的软件开发工具包&#xff0c;主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心&#xff0c;它包含了JAVA的运行环境&#xff08;JVMJava系统类库&#xff09;和JAVA工具。 JDK 20 下载 JDK 官网路径&#xff1…

内网穿透实战应用——【通过cpolar分享本地电脑上有趣的照片:发布piwigo网页】

通过cpolar分享本地电脑上有趣的照片&#xff1a;发布piwigo网页 文章目录 通过cpolar分享本地电脑上有趣的照片&#xff1a;发布piwigo网页前言1. 设定一条内网穿透数据隧道2. 与piwigo网站绑定3. 在创建隧道界面填写关键信息4. 隧道创建完成 总结 前言 首先在本地电脑上部署…