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()
保持学习,否则迟早要被淘汰*(^ 。 ^ )***