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 np

cap = 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) + x1
    cy = int(y) + y1
    return 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 = 10

img = 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis和MybatisPlus:数据库操作工具的对比

目录 什么是mybatis 什么是mybatisplus MyBatis-Plus&#xff1a;为简化数据库操作而生的强大工具 一、MyBatis-Plus的背景和概述 二、MyBatis-Plus的主要特点 三、如何使用MyBatis-Plus mybatis-Plus的优势 什么是Hibernate Hibernate&#xff1a;Java开发者的数据持久…

数字化转型的终局

&#xff08;1&#xff09;数字化转型 我手头有一本书叫《提升》&#xff0c;是IBM市场部所属的商业价值研究院在2011年出版的图书。 在书的第三章《数字化转型》一章中第68页提出了”数字化转型“能力&#xff1a; 1、业务模式创新-客户和社区协作-跨渠道整合-数字化供应链 2、…

人工智能的广泛应用与影响

目录 前言1 智能手机与个人助手2 医疗保健3 自动驾驶技术4 金融领域5 教育与学习6 智能家居与物联网7 娱乐与媒体8 环境保护结语 前言 人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;是当今科技领域的璀璨明星&#xff0c;它不仅在技术创新方面掀起了…

【机器学习】036_权重衰退

一、范数 定义&#xff1a;向量的范数表示一个向量有多大&#xff08;分量的大小&#xff09; L1范数&#xff1a; 即向量元素绝对值之和&#xff0c;用符号 ‖ v ‖ 1 表示。 公式&#xff1a; L2范数&#xff1a; 即向量的模&#xff0c;向量各元素绝对值的平方之和再…

基于springboot实现智能热度分析和自媒体推送平台系统项目【项目源码】计算机毕业设计

基于springboot实现智能热度分析和自媒体推送平台演示 系统开发平台 在该自媒体分享网站中&#xff0c;Eclipse能给用户提供更多的方便&#xff0c;其特点一是方便学习&#xff0c;方便快捷&#xff1b;二是有非常大的信息储存量&#xff0c;主要功能是用在对数据库中查询和编…

如果在手机没有root的情况下完成安卓手机数据恢复

您是否不小心从安卓设备中删除了重要数据&#xff1f; 担心如何取回您的照片、视频和文档&#xff1f; 有时您可能会不小心删除重要数据并使用安卓 root方法取回文件。 许多用户不喜欢根植他们的安卓设备&#xff0c;因为这是一种复杂的方法。 在本指南中&#xff0c;我们将向您…

【寒武纪(10)】linux arm aarch 是 opencv 交叉编译与使用

文章目录 1、直接找github 别人编译好的2、自主编译参考 3使用CMake检查 参考 1、直接找github 别人编译好的 测试很多&#xff0c;找到一个可用的。 https://github.com/dog-qiuqiu/libopencv 它用了超级模块&#xff01; OpenCV的world模块也称为超级模块&#xff08;supe…

【Java基础】Java导Excel攻略

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

HALCON根据需要创建自定义函数

任务要求&#xff1a; 创建函数myfun(a,b,c)&#xff0c;输入浮点数a&#xff0c;b的值&#xff0c;计算c a b&#xff0c;将计算结果返回。 操作步骤&#xff1a; 1&#xff09;打开HDevelop程序 2&#xff09;打开函数菜单&#xff0c;选择“创建新函数”&#xff0c…

存储配置和挂载方式

存储配置 Iscsi简介 iSCSI 启动器&#xff0c;从本质上说&#xff0c;iSCSI 启动器是一个客户端设备&#xff0c;用于将请求连接并启动到服务器&#xff08;iSCSI 目标&#xff09;。 iSCSI 启动器有三种实现方式&#xff1a;可以完全基于硬件实现&#xff0c;比如 iSCSI H…

Conditional GAN

Text-to-Image 对于根据文字生成图像的问题&#xff0c;传统的做法就是训练一个NN&#xff0c;然后输入一段文字&#xff0c;输出对应一个图片&#xff0c;输出图片与目标图片越接近越好。存在的问题就是&#xff0c;比如火车对应的图片有很多张&#xff0c;如果用传统的NN来训…

在浏览器中使用WebRTC获取用户IP地址

本文翻译自 Discover WebRTC: Obtain User IP Addresses in the Browser&#xff0c;作者&#xff1a;Zack&#xff0c; 略有删改。 如果需要在程序中获取当前用户的IP&#xff0c;通常手段都是需要使用服务器。但现在借助WebRTC的强大功能&#xff0c;我们可以直接在浏览器客户…

基于springboot实现医院信管系统项目【项目源码+论文说明】

基于springboot实现医院信管系统演示 摘要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#x…

重磅,瑞士药监局 发布 EU GMP附录1《无菌药品生产》官方解读!

近日&#xff0c;瑞士药监局发布了EU GMP附录1《无菌药品生产》&#xff08;同时也是PIC/S和WHO GMP附录1&#xff09;的解读文件&#xff0c;该文件侧重于新版EU、PIC/S和WHO GMP附录1的一些最重要的变化&#xff0c;也涵盖了长期以来反复引起问题的方面。反映了检查员对这些主…

python操作windows窗口,python库pygetwindow使用详解

文章目录 一、pygetwindow模块简介二、pygetwindow常用方法1、常用方法2、window常用方法 一、pygetwindow模块简介 pygetwindow是一个Python第三方库&#xff0c;用于获取、管理和操作窗口。它提供了一些方法和属性&#xff0c;使得在Python程序中可以轻松地执行各种窗口操作…

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

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

通信原理板块——差错控制编码或纠错编码

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 1、背景 数字信号在传输过程中&…

(免费领源码)python#flask#mysql旅游数据可视化81319-计算机毕业设计项目选题推荐

摘要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对旅游数据可视化等问题&#xff0c;对旅游数据…

AD9361寄存器功能笔记之本振频率设定

LO的产生过程如图&#xff1a; 各个模块都有高灵活性。 1、参考时钟即是AD9361全局参考时钟&#xff0c;可以是外接晶振的片上DCXO&#xff0c;或是外部输入的有驱动能力的时钟信号。根据FM-COMMS5的设计&#xff0c;参考时钟可以使用时钟Buffer 40MHz晶振构成的参考频率源。 …

实战 - 在Linux上部署各类软件

前言 为什么学习各类软件在Linux上的部署 在前面&#xff0c;我们学习了许多的Linux命令和高级技巧&#xff0c;这些知识点比较零散&#xff0c;同学们跟随着课程的内容进行练习虽然可以基础掌握这些命令和技巧的使用&#xff0c;但是并没有一些具体的实操能够串联起来这些知…