openCV教程(三)

文章目录

  • 1 车辆统计项目
    • 1.1 背景减除
    • 1.2 车辆统计
  • 2 特征点检测和匹配
    • 2.1 harris角点检测
    • 2.2 shi-tomasi角点检测
    • 2.3 SIFT关键点检测
    • 2.4 SURF特征检测
    • 2.5 ORB特征检测
  • 3 特征匹配
    • 3.1 暴力特征匹配
    • 3.2 FLANN特征匹配
    • 3.3 图像查找
      • 3.3.1 单应性矩阵
  • 4 模版匹配
    • 4.1 模版匹配
    • 4.2 匹配多个对象
    • 4.3 处理模版图片
    • 4.4 数字模版处理和信用卡图片形态学操作
  • 5 图像分割
    • 5.1 分水岭法
    • 5.2 GrabCut
    • 5.3 MeanShift
  • 6 图像修复
  • 7 人脸检测

1 车辆统计项目

在这里插入图片描述

import cv2
import numpy as np# 读取视频
cap = cv2.VideoCapture('./video/car.mp4')# 循环读取视频每一帧
while True:ret, frame = cap.read()if ret:cv2.imshow('video',frame)key = cv2.waitKey(1)# 用户按esc推出if key == 27:break# 最后释放资源
cap.release()
# 关闭窗口
cv2.destroyAllWindows()

1.1 背景减除

在这里插入图片描述

import cv2
import numpy as npcap = cv2.VideoCapture(0)
bgs = cv2.bgsegm.createBackgroundSubtractorMOG()
while True:ret, frame = cap.read()if ret:fgmask = bgs.apply(frame)cv2.imshow('video', fgmask)key = cv2.waitKey(1)# ESC键if key == 27:break
cap.release()
cv2.destroyAllWindows()

1.2 车辆统计

import cv2
import numpy as np# 读取视频
cap = cv2.VideoCapture('./video/car.mp4')
# 创建mog对象
mog = cv2.bgsegm.createBackgroundSubtractorMOG()
# 获取腐蚀卷积核
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))# 最大外接矩形的宽
min_w = 40
# 最大外接矩形的高
min_h = 30
# 线高
line_high = 630
# 车辆集合
cars = []
# 阈值
offset = 6
# 计数
car_num = 0# 计算外接矩形的中心点
def center(x, y, w, h):x1 = int(w / 2)y1 = int(h / 2)cx = int(x) + x1cy = int(y) + y1return cx, cy# 循环读取视频每一帧
while True:ret, frame = cap.read()if ret:# 把原始帧进行灰度化,然后去噪# # 灰度gray = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)# # 去噪blur = cv2.GaussianBlur(gray, (3, 3), 5)# 去背景mask = mog.apply(blur)# 腐蚀erode = cv2.erode(mask, kernel, iterations=2)# 膨胀2次dialte = cv2.dilate(erode, kernel, iterations=2)# 消除内部的小块# 闭运算close = cv2.morphologyEx(dialte, cv2.MORPH_CLOSE, kernel)# cv2.imshow('video',dialte)# cv2.imshow('close',close)# 划线cv2.line(frame, [10, line_high], [1270, line_high], [255, 0, 0], 2)# 查找轮廓contours, h = cv2.findContours(close, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)# 画出所有检测出来的轮廓for contour in contours:# 最大外接矩形(x, y, w, h) = cv2.boundingRect(contour)is_valid = (w >= min_w) and (h >= min_h)if not is_valid:continue# 要求坐标点都是整数cv2.rectangle(frame, (int(x), int(y)), (int(x + w), int(y + h)), (0, 0, 255), 2)# 如何计数# 把车抽象为一点,即外接矩形的中心点# 通过外接矩形,计算车的中心点cpoint = center(x, y, w, h)# 将符合条件的车存入列表cars.append(cpoint)cv2.circle(frame, (cpoint), 5, (0, 0, 255), -1)# 判断汽车是否过检测线for (x, y) in cars:if (line_high - offset) < y < (line_high + offset):# 落入了有效区间# 计数加一car_num += 1# 然后remove掉cars.remove((x, y))print(car_num)# 添加字符串cv2.putText(frame, 'Vechicle Count:' + str(car_num), [500, 60], cv2.FONT_HERSHEY_SIMPLEX, 2, [0, 0, 255], 5)cv2.imshow('frame', frame)key = cv2.waitKey(3)# 用户按esc推出if key == 27:break# 最后释放资源
cap.release()
# 关闭窗口
cv2.destroyAllWindows()

2 特征点检测和匹配

2.1 harris角点检测

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

import cv2
import numpy as np
img = cv2.imread('./image/dog.png')# 变成灰度图片
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
# harris角点检测
dst = cv2.cornerHarris(gray, blockSize=2, ksize=3, k=0.04)
#返回的东西叫做角点响应.每一个像素点都能计算出一个角点响应来# 
print(dst)
print(dst.shape)#显示角点
#我们认为角点响应大于0.01倍的dst.max()就可以认为是角点了.
img[dst > 0.01* dst.max()]= [0,0,255]
cv2.imshow('img',img)cv2.waitKey(0)
cv2.destroyAllWindows()

2.2 shi-tomasi角点检测

在这里插入图片描述

import cv2
import numpy as np
#harris
# bLockSize = 2
# ksize = 3
# k = e.e4
# Shi-Tomasi
maxCorners = 1000
ql = 0.01
minDistance = 10img = cv2.imread('./image/dog.png')#灰度化
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
corners = cv2.goodFeaturesToTrack(gray,maxCorners,ql, minDistance)
corners = np.int16(corners)
#Shi-Tomasi绘制角点
for i in corners:x,y = i.ravel()cv2.circle(img,(x,y), 3,(255,0,0

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

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

相关文章

【前端学java】java中的Object类(8)

往期回顾&#xff1a; 【前端学java】JAVA开发的依赖安装与环境配置 &#xff08;0&#xff09;【前端学 java】java的基础语法&#xff08;1&#xff09;【前端学java】JAVA中的packge与import&#xff08;2&#xff09;【前端学java】面向对象编程基础-类的使用 &#xff08…

探索人工智能领域——每日30个名词详解【day4】

目录 前言 正文 总结 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助。 &#x1f4a1;本文由Filotimo__✍️原创&#xff0c;首发于CSDN&#x1f4da;。 &#x1f4e3;如需转载&#xff0c;请事先与我联系以…

初步设计报告(框架)

前言 &#xff08;简述初步设计报告编制的背景、过程及其它有关情况&#xff09;&#xff08;内容可根据项目的实际建设内容进行选择&#xff09; 编制单位资质证明

BUUCTF [BJDCTF2020]一叶障目 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 得到的 flag 请包上 flag{} 提交。来源&#xff1a;https://github.com/BjdsecCA/BJDCTF2020 密文&#xff1a; 下载附件&#xff0c;解压得到一张.png图片。 解题思路&#xff1a; 1、在010 Editor中打开&#x…

填充每个节点的下一个右侧节点指针

题目链接 填充每个节点的下一个右侧节点指针 题目描述 注意点 给定一个 完美二叉树 解答思路 广度优先遍历一层层的遍历二叉树&#xff0c;将每一层节点的next指针都指向右侧节点 代码 class Solution {public Node connect(Node root) {if (root null) {return null;}…

使用drawio的图层构建更强大的图表

drawio中使用图层 drawio是一款强大的图表绘制软件&#xff0c;支持在线云端版本以及windows, macOS, linux安装版。 如果想在线直接使用&#xff0c;则直接输入网址draw.io或者使用drawon(桌案), drawon.cnhttps://www.drawon.cn?useSourcecsdn内部完整的集成了drawio的所有功…

Linux常用命令——builtin命令

在线Linux命令查询工具 builtin 执行shell内部命令 补充说明 builtin命令用于执行指定的shell内部命令&#xff0c;并返回内部命令的返回值。builtin命令在使用时&#xff0c;将不能够再使用Linux中的外部命令。当系统中定义了与shell内部命令相同的函数时&#xff0c;使用…

JavaEE进阶(1)Java EE 简述(Java EE 发展历程、什么是Web开发? Web网站的工作流程、什么是框架?Java EE 框架学习概览)

目录 Java EE 简述 Java EE 发展历程 什么是Web开发? Web网站的工作流程 什么是框架 框架的定义 源于建筑行业的类比 框架的作用 Java EE 框架学习概览 1. Spring 2. Spring Boot 3. Spring MVC 4. Mybatis 框架之间的关系 Java EE 简述 Java EE是Java平台的企…

基于SpringBoot+Mybatis plus+React.js实现条件选择切换搜索功能

笔记/朱季谦 在写React前端逻辑时&#xff0c;经常遇到可以切换不同条件的列表查询功能&#xff0c;例如下边截图这样的&#xff0c;其实&#xff0c;这块代码基本都一个逻辑&#xff0c;可以一次性将实现过程记录下来&#xff0c;待以后再遇到时&#xff0c;直接根据笔记复用…

PgSQL技术内幕-Bitmap Index Scan

PgSQL技术内幕-Bitmap Index Scan 1、简介 Bitmap索引扫描是对索引扫描的一个优化&#xff0c;通过建立位图的方式将原来的随机堆表访问转换成顺序堆表访问。主要分为两点&#xff1a;1&#xff09;管理每个Bitmap的hash slot没用完时&#xff0c;每个Bitmap代表每个heap页中满…

在VS Code中查看Word, PDF, Excel

文章目录 vscode-pdfExcel Vieweroffice viewerVS Code神级插件 vscode-pdf 这年头连Edge浏览器都支持pdf阅读&#xff0c;那么VS Code不支持显然不太合适。搜索并安装vscode-pdf之后&#xff0c;就可以非常便捷地查看pdf文档了。vscode-pdf是基于pdf.js开发的阅读插件&#x…

计算机毕业设计python企业员工人事管理系统vue

管理员&#xff1a; 1.员工资料管理&#xff1a;查看员工列表&#xff0c;添加职工&#xff0c;修改信息&#xff08;搜索员工使用模糊查询&#xff09; 2.部门管理&#xff1a;查看部门列表&#xff0c;修改信息&#xff0c;添加新部门 3.职工考勤管理&#xff1a;添加&#x…

BUUCTF [BJDCTF2020]鸡你太美 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 得到的 flag 请包上 flag{} 提交。来源&#xff1a; https://github.com/BjdsecCA/BJDCTF2020 密文&#xff1a; 下载附件&#xff0c;解压得到两个.gif图片。 第一个gif图片&#xff1a; 第二个gif图片无法打开。…

vue3-响应式核心

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue3-响应式核心 响应式核心 目录 响应式核心 3.1ref() 3.2computed () 3.3 reactive() 3.4 …

【代码随想录】算法训练计划27

回溯 1、39. 组合总和 题目&#xff1a; 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的…

【Java】多线程-wait/notify

1、wait和notify Java的多线程中&#xff0c;线程的执行顺序和时间都是不定的。为了控制线程的调度顺序&#xff0c;前面我们引入了join()方法。 但是join()只能在线程执行完后&#xff0c;才能执行其他线程&#xff0c;有没有什么方法可以在线程执行顺序中来调度其他线程呢&…

CTF-PWN-小tips

文章目录 overflowscanfgetreadstrcpystrcat Find string in gdbgdbgdb peda Binary ServiceFind specific function offset in libc手工自动 Find /bin/sh or sh in library手动自动 Leak stack addressFork problem in gdbSecret of a mysterious section - .tlsPredictable …

【腾讯云 HAI域探秘】高性能服务器引领AI革新浪潮:从AI绘画、知识问答到PyTorch图像分类、视频检测的全方位探索

目录 1 HAI&#xff08;高性能应用服务&#xff09;简介2 HAI的应用场景2.1 HAI在AI作画中的灵活性与效率2.2 深入探索LLM语言模型的应用与性能2.3 HAI支持的AI模型开发环境与工具 3 基于stable difussio的AI 绘画应用实践3.1 使用AI模型中的stable diffusion模型服务3.2 设置和…

10个好用的Mac数据恢复软件推荐—恢复率高达99%

如果您正在寻找最好的 Mac 数据恢复软件来检索意外删除或丢失的文件&#xff0c;那么这里就是您的最佳选择。 我们理解&#xff0c;当您找不到 Mac 计算机或外部驱动器上保存的一些重要文件时&#xff0c;会感到多么沮丧和绝望。这些文件非常珍贵&#xff0c;无论出于何种原因…

【寒武纪(14)】硬件系统由标量指令、向量指令、张量指令、访存指令构成

我们在文档《Cambricon-BANG-C-Developer-Guide-EN-v4.5.1》的build-in function 发现&#xff0c;存在三种计算&#xff1a;矩阵乘法、标量类型、向量。 查阅《Cambricon-BANG-C-CProgramming-Guide-CN-v1.5.0.pdf》可知&#xff0c;硬件系统由标量指令、向量指令、张量指令、…