原创: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相关推荐

  1. JavaWeb黑马旅游网-学习笔记02【注册功能】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  2. JavaWeb-综合案例(用户信息)-学习笔记02【登录功能】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb-综合案例(用户信息)-学习笔记01[列表查询] JavaWeb-综合案例(用户信息)-学习笔记02[登录功能] JavaWeb-综合案 ...

  3. Servlet和HTTP请求协议-学习笔记02【Servlet_体系结构与urlpartten配置、HTTP请求协议】

    Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...

  4. Tomcat学习笔记02【Tomcat部署项目】

    Java后端 学习路线 笔记汇总表[黑马程序员] Tomcat学习笔记01[Web相关概念.Tomcat基本操作][day01] Tomcat学习笔记02[Tomcat部署项目][day01] 目录 ...

  5. XML学习笔记02【xml_解析】

    Java后端 学习路线 笔记汇总表[黑马程序员] XML学习笔记01[xml_基础.xml_约束][day01] XML学习笔记02[xml_解析][day01] 目录 03 xml_解析 xml_解 ...

  6. Bootstrap学习笔记02【全局CSS样式、组件和插件、案例_黑马旅游网_首页】

    Java后端 学习路线 笔记汇总表[黑马程序员] Bootstrap学习笔记01[快速入门.栅格布局][day01] Bootstrap学习笔记02[全局CSS样式.组件和插件.案例_黑马旅游网][d ...

  7. JavaScript学习笔记02【基础——对象(Function、Array、Date、Math)】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

  8. HTML/CSS学习笔记02【表单标签】

    w3cschool菜鸟教程.CHM(腾讯微云):https://share.weiyun.com/c1FaX6ZD HTML/CSS学习笔记01[概念介绍.基本标签.表单标签][day01] HTML ...

  9. JDBC学习笔记02【ResultSet类详解、JDBC登录案例练习、PreparedStatement类详解】

    黑马程序员-JDBC文档(腾讯微云)JDBC笔记.pdf:https://share.weiyun.com/Kxy7LmRm JDBC学习笔记01[JDBC快速入门.JDBC各个类详解.JDBC之CR ...

最新文章

  1. python在企业有哪些应用_python2和python3在企业中应用有哪些
  2. 利用MySQL触发器实现check和assertion
  3. Oracle DBlink相关
  4. 13、设置默认字符集和校对规则
  5. php swoole 内存,swoole 占用内存到10M 报错
  6. 推荐系统遇上深度学习(十一)--神经协同过滤NCF原理及实战
  7. 只腐蚀毛刺 腐蚀算法_去毛刺更省时省力的方式方法大全!
  8. 课程作业----递归那些事
  9. Java必知必会之socket
  10. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_05 IO字符流_1_字符输入流_Reader类FileRead...
  11. enq: HW - contention等待事件
  12. [Zju 2112][逆序对统计] 线段树(四) {线段树扩展}
  13. 计算机维修兴趣小组,计算机兴趣小组章程
  14. 华为转正答辩ppt范文_华为转正答辩ppt模板下载-精选版.ppt
  15. Android基础夯实--重温动画(四)之属性动画 ValueAnimator详解
  16. python 基于卡方值分箱算法
  17. 量化投资作业的R实现——收益率相关图形绘制
  18. kubectl认证 授权 准入控制
  19. HTML5响应式手机模板:电商网站设计——仿淘宝手机app界面模板源码 HTML+CSS+JavaScript...
  20. C语言的主要用途以及未来发展

热门文章

  1. tfs 文件系统部署_使用SQL Server数据工具和使用自定义工作流文件的TFS部署到多个数据库
  2. ssis 执行 依赖_从SSIS执行您自己的.NET控制台应用程序
  3. 数据库逻辑删除的sql语句_SQL查询优化的数据库设计和逻辑断言
  4. print('{:15}|{:^9}|{:^9}'.format('', 'lat.', 'long.'))是什么意思?
  5. 删除一个用户下的所有表脚本
  6. 设计模式之——bridge模式
  7. linq 获取实体列表中的某个字段返回iliststring
  8. 用JavaScript实现的十个图像特效
  9. C#2.0 泛型初探 (特性一览)
  10. pyqt5开发环境配置