• OpenCV笔记(6)(harris角点检测、背景建模)


    一、Harris角点

     

    如上图所示,红色框AB都是平面,蓝色框CD都是边缘,而绿色框EF就是角点。

    平面:框往X或Y抽移动,变化都很小。

    边缘:框沿X或Y轴移动,其中一个变化很小,而另外一个变化比较大。

    角点:框沿X或Y轴移动,两个变化都比较大。

    见《图像基础》笔记第7页

    二、背景建模

    使用帧差法:

     即用后一帧图像减去前一帧图像,得到运动的物体,但是会出现空洞(前景物体的一个面灰度变化不大,减完得到接近0的数)。

    使用GMM方法:

    # -*- coding:utf-8 -*-
    __author__ = 'Leo.Z'
    
    import cv2 as cv
    
    # 打开媒体流
    cap = cv.VideoCapture('rtsp://admin:bs12345678@171.221.219.92:554/PSIA/streaming/channels/1201')
    # 创建一个形态学kernel
    kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE, (5, 5))
    # 创建MOG2
    fgbg = cv.createBackgroundSubtractorMOG2()
    
    while (True):
        # 读取一帧
        ret, frame = cap.read()
        # MOG2运用到每一帧
        fgmask = fgbg.apply(frame)
        # 使用形态学开操作
        fgmask = cv.morphologyEx(fgmask, cv.MORPH_OPEN, kernel)
        # 找轮廓
        contours, hierarchy = cv.findContours(fgmask, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
    
        for c in contours:
            # 计算每个轮廓的周长
            perimeter = cv.arcLength(c, True)
            # 周长大于188的则用方框框起来
            if perimeter > 188:
                # 获取轮廓的外接矩形
                x, y, w, h = cv.boundingRect(c)
                cv.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
    
        cv.imshow('frame', frame)
        cv.imshow('fgmask', fgmask)
        k = cv.waitKey(10) & 0xff
        if k == 27:
            break
    # 释放cap
    cap.release()
    # 关闭所有窗口
    cv.destroyAllWindows()
  • 相关阅读:
    Golang (Go语言) Mac OS X下环境搭建 环境变量配置 开发工具配置 Sublime Text 2
    网站状态保存方法
    学习MVC第一课:初识MVC
    ASP.NET MVC 中动态从路由中获取URL
    ASP.NET MVC2程序开发入门到精通系列课程01
    OpenCV 里的sigma 是多少
    日期大小比较
    安装完ODAC,出现ORA12560:TNS:协议适配器错误
    Spring+IBATIS+Struts2开发流程
    【转】SSH标准配置
  • 原文地址:https://www.cnblogs.com/leokale-zz/p/11372975.html
Copyright © 2020-2023  润新知