zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    HDOJ 2577 How To Type
    HDOJ 1171 Big Event in HDU
    HDOJ 2159 FATE
    HDOJ 1176 免费馅饼
    POJ 1014 Dividing
    HDOJ 2844 Coins
    可以设置DefaultButton的TextBox控件
    setTimeout和setInterval的使用
    C# 调用ExchangeWebservice的相关代码
    实现IConfigurationSectionHandler接口来编写自定义配置
  • 原文地址:https://www.cnblogs.com/leokale-zz/p/11372975.html
Copyright © 2011-2022 走看看