openCVPracticalExercise学习笔记02
原创:openCVPracticalExercise学习笔记02
10使用Hu矩进行形状匹配
Hu矩(或者更确切地说是Hu矩不变量)是使用对图像变换不变的中心矩计算的一组7个变量。事实证明,前6个矩不变量对于平移,缩放,旋转和映射都是不变的。而第7个矩会因为图像映射而改变。
OpenCV中,我们HuMoments()用来计算输入图像中的Hu矩。
1 2 3 |
_,im = cv2.threshold(im, 128, 255, cv2.THRESH_BINARY) moment = cv2.moments(im) huMoments = cv2.HuMoments(moment) |
基于matchShapes函数计算两个图形之间的距离
1 |
m2 = cv2.matchShapes(im1,im2,cv2.CONTOURS_MATCH_I2,0) |
您可以通过第三个参数(CONTOURS_MATCH_I1,CONTOURS_MATCH_I2或CONTOURS_MATCH_I3)使用三种b不同的距离。如果上述距离很小,则两个图像(im1和im2)相似。您可以使用任何距离测量。它们通常产生类似的结果。
11基于OpenCV的二维码扫描器
核心代码
1 2 |
qrDecoder = cv2.QRCodeDetector() data,bbox,rectifiedImage = qrDecoder.detectAndDecode(inputImage) |
12使用深度学习和OpenCV进行手部关键点检测
核心代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
inpBlob = cv2.dnn.blobFromImage(frame, 1.0 / 255, (inWidth, inHeight), (0, 0, 0), swapRB=False, crop=False)net.setInput(inpBlob)output = net.forward() print("time taken by network : {:.3f}".format(time.time() - t))points = []for i in range(nPoints):probMap = output[0, i, :, :]probMap = cv2.resize(probMap, (frameWidth, frameHeight))minVal, prob, minLoc, point = cv2.minMaxLoc(probMap)if prob > threshold :cv2.circle(frameCopy, (int(point[0]), int(point[1])), 8, (0, 255, 255), thickness=-1, lineType=cv2.FILLED)points.append((int(point[0]), int(point[1])))else :points.append(None) |
13OpenCV中使用Mask R-CNN进行对象检测和实例分割
核心代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# For each frame, extract the bounding box and mask for each detected object def postprocess(boxes, masks):numClasses = masks.shape[1]numDetections = boxes.shape[2]frameH = frame.shape[0]frameW = frame.shape[1]for i in range(numDetections):box = boxes[0, 0, i]mask = masks[i]score = box[2]if score > confThreshold:classId = int(box[1])# Extract the bounding boxleft top right bottom = xxxclassMask = mask[classId]drawBox(frame, classId, score, left, top, right, bottom, classMask) |
14使用OpenCV实现单目标跟踪
核心代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
bbox = cv2.selectROI(frame, False) ok = tracker.init(frame, bbox)while True:ok, frame = video.read()if not ok:breakok, bbox = tracker.update(frame)if ok:# Tracking successp1 = (int(bbox[0]), int(bbox[1]))p2 = (int(bbox[0] + bbox[2]), int(bbox[1] + bbox[3]))cv2.rectangle(frame, p1, p2, (255,0,0), 2, 1) |
15基于深度学习的目标跟踪算法GOTURN
核心代码:同上,只是模型变了,思路未变
16使用OpenCV实现多目标跟踪Video
核心代码:和单目标类似,Tracker变成多个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# Create MultiTracker object multiTracker = cv2.MultiTracker_create() for bbox in bboxes: multiTracker.add(createTrackerByName(trackerType), frame, bbox)while cap.isOpened(): success, frame = cap.read() if not success:break# get updated location of objects in subsequent frames success, boxes = multiTracker.update(frame)# draw tracked objects for i, newbox in enumerate(boxes):p1 = (int(newbox[0]), int(newbox[1]))p2 = (int(newbox[0] + newbox[2]), int(newbox[1] + newbox[3]))cv2.rectangle(frame, p1, p2, colors[i], 2, 1) |
17基于卷积神经网络的OpenCV图像着色(略)
18Opencv中的单应性矩阵Homography(略)
Homography的应用-全景拼接
1 2 3 4 5 |
# Calculate Homography h, status = cv2.findHomography(pts_src, pts_dst)# Warp source image to destination based on homography im_out = cv2.warpPerspective(im_src, h, (im_dst.shape[1],im_dst.shape[0])) |
19使用OpenCV实现基于特征的图像对齐
OpenCV的图像对齐
2.1 基于特征的图像对齐的步骤
现在我们可以总结图像对齐所涉及的步骤。
Step1读图
我们首先在C ++中和Python中读取参考图像(或模板图像)和我们想要与此模板对齐的图像。
Step2寻找特征点
我们检测两个图像中的ORB特征。虽然我们只需要4个特征来计算单应性,但通常在两个图像中检测到数百个特征。我们使用Python和C ++代码中的参数MAX_FEATURES来控制功能的数量。
Step3 特征点匹配
我们在两个图像中找到匹配的特征,按匹配的评分对它们进行排序,并保留一小部分原始匹配。我们使用汉明距离(hamming distance)作为两个特征描述符之间相似性的度量。请注意,我们有许多不正确的匹配。
Step4 计算Homography
当我们在两个图像中有4个或更多对应点时,可以计算单应性。上一节中介绍的自动功能匹配并不总能产生100%准确的匹配。20-30%的比赛不正确并不罕见。幸运的是,findHomography方法利用称为随机抽样一致性算法(RANSAC)的强大估计技术,即使在存在大量不良匹配的情况下也能产生正确的结果。RANSAC具体介绍见:
https://www.cnblogs.com/xingshansi/p/6763668.html
https://blog.csdn.net/zinnc/article/details/52319716
Step5 图像映射
一旦计算出准确的单应性,我可以应用于一个图像中的所有像素,以将其映射到另一个图像。这是使用OpenCV中的warpPerspective函数完成的。
openCVPracticalExercise学习笔记02相关推荐
- JavaWeb黑马旅游网-学习笔记02【注册功能】
Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...
- JavaWeb-综合案例(用户信息)-学习笔记02【登录功能】
Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb-综合案例(用户信息)-学习笔记01[列表查询] JavaWeb-综合案例(用户信息)-学习笔记02[登录功能] JavaWeb-综合案 ...
- Servlet和HTTP请求协议-学习笔记02【Servlet_体系结构与urlpartten配置、HTTP请求协议】
Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...
- Tomcat学习笔记02【Tomcat部署项目】
Java后端 学习路线 笔记汇总表[黑马程序员] Tomcat学习笔记01[Web相关概念.Tomcat基本操作][day01] Tomcat学习笔记02[Tomcat部署项目][day01] 目录 ...
- XML学习笔记02【xml_解析】
Java后端 学习路线 笔记汇总表[黑马程序员] XML学习笔记01[xml_基础.xml_约束][day01] XML学习笔记02[xml_解析][day01] 目录 03 xml_解析 xml_解 ...
- Bootstrap学习笔记02【全局CSS样式、组件和插件、案例_黑马旅游网_首页】
Java后端 学习路线 笔记汇总表[黑马程序员] Bootstrap学习笔记01[快速入门.栅格布局][day01] Bootstrap学习笔记02[全局CSS样式.组件和插件.案例_黑马旅游网][d ...
- JavaScript学习笔记02【基础——对象(Function、Array、Date、Math)】
w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...
- HTML/CSS学习笔记02【表单标签】
w3cschool菜鸟教程.CHM(腾讯微云):https://share.weiyun.com/c1FaX6ZD HTML/CSS学习笔记01[概念介绍.基本标签.表单标签][day01] HTML ...
- JDBC学习笔记02【ResultSet类详解、JDBC登录案例练习、PreparedStatement类详解】
黑马程序员-JDBC文档(腾讯微云)JDBC笔记.pdf:https://share.weiyun.com/Kxy7LmRm JDBC学习笔记01[JDBC快速入门.JDBC各个类详解.JDBC之CR ...
最新文章
- python在企业有哪些应用_python2和python3在企业中应用有哪些
- 利用MySQL触发器实现check和assertion
- Oracle DBlink相关
- 13、设置默认字符集和校对规则
- php swoole 内存,swoole 占用内存到10M 报错
- 推荐系统遇上深度学习(十一)--神经协同过滤NCF原理及实战
- 只腐蚀毛刺 腐蚀算法_去毛刺更省时省力的方式方法大全!
- 课程作业----递归那些事
- Java必知必会之socket
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_05 IO字符流_1_字符输入流_Reader类FileRead...
- enq: HW - contention等待事件
- [Zju 2112][逆序对统计] 线段树(四) {线段树扩展}
- 计算机维修兴趣小组,计算机兴趣小组章程
- 华为转正答辩ppt范文_华为转正答辩ppt模板下载-精选版.ppt
- Android基础夯实--重温动画(四)之属性动画 ValueAnimator详解
- python 基于卡方值分箱算法
- 量化投资作业的R实现——收益率相关图形绘制
- kubectl认证 授权 准入控制
- HTML5响应式手机模板:电商网站设计——仿淘宝手机app界面模板源码 HTML+CSS+JavaScript...
- C语言的主要用途以及未来发展
热门文章
- tfs 文件系统部署_使用SQL Server数据工具和使用自定义工作流文件的TFS部署到多个数据库
- ssis 执行 依赖_从SSIS执行您自己的.NET控制台应用程序
- 数据库逻辑删除的sql语句_SQL查询优化的数据库设计和逻辑断言
- print('{:15}|{:^9}|{:^9}'.format('', 'lat.', 'long.'))是什么意思?
- 删除一个用户下的所有表脚本
- 设计模式之——bridge模式
- linq 获取实体列表中的某个字段返回iliststring
- 用JavaScript实现的十个图像特效
- C#2.0 泛型初探 (特性一览)
- pyqt5开发环境配置