个人建网站大概多少钱,基于vue的开源cms,台州网站排名优化费用,hyein seo目录
边界矩形
旋转矩形(最小外接矩形):
计算轮廓
找4个点的坐标
把浮点型转为Int
画轮廓
边界矩形--#xff08;最大外接矩形#xff09;
转灰度
找轮廓
找顶点
画矩形
显示
背景分离方法#xff08;这个很好玩#xff0c;可以识别在动的物体#xff09; 边…目录
边界矩形
旋转矩形(最小外接矩形):
计算轮廓
找4个点的坐标
把浮点型转为Int
画轮廓
边界矩形--最大外接矩形
转灰度
找轮廓
找顶点
画矩形
显示
背景分离方法这个很好玩可以识别在动的物体 边界矩形
有两种类型的边界矩形:
旋转矩形(最小外接矩形):
是用最小面积绘制的所以它也考虑了旋转。使用的函数是cv.minAreaRect()。它返回一个Box2D结构其中包含以下细节-(中心(x,y)(宽度高度)旋转角度)。但要画出这个矩形我们需要矩形的四个角。它由函数cv.boxPoints()获得
cv.minAreaRect()函数返回一个包含以下信息的 RotatedRect 对象 center矩形的中心坐标(x, y)。 size矩形的尺寸(width, height)。 angle矩形的旋转角度取值范围为 -90 到 0 度。
cv2.boxPoints(box) 返回的是构成旋转矩形的四个顶点的坐标。返回的结果是一个形状为 (4, 2) 的 NumPy 数组其中每一行代表一个顶点的 (x, y) 坐标。这四个顶点按照特定的顺序排列通常是按照顺时针或逆时针方向。
cv2.drawContours(image, contours, contourIdx, color, thicknessNone, lineTypeNone, hierarchyNone, maxLevelNone, offsetNone)
各个参数的含义如下 image目标图像要在其上绘制轮廓。 contours轮廓列表每个轮廓是一个点的向量。必须是一个3维的列表且必须是整数int contourIdx指定要绘制的轮廓的索引如果为负数则绘制所有轮廓。 color绘制轮廓的颜色。 thickness轮廓线的宽度如果为负数则轮廓内部被填充。 lineType线条类型例如 cv2.LINE_88 连接的线、cv2.LINE_AA抗锯齿线等默认值是 cv2.LINE_8。 hierarchy可选的轮廓层次信息。 maxLevel绘制轮廓的最大层次。如果为 0则只绘制指定的轮廓如果为 1则绘制指定轮廓及其直接子轮廓依此类推。默认值为 0。 offset可选的偏移量用于移动轮廓的位置
示例代码 im cv2.imread(yy.png)#图片是一个五角星 im1im.copy() imcv2.cvtColor(im,cv2.COLOR_BGRA2GRAY) 计算轮廓 contours,cv2.findContours(im,cv2.RETRTREE,cv2.CHAINAPPROXSIMPLE) 找4个点的坐标 boxcv2.minAreaRect(contours[0])#因为box是一个元组套一个列表contours就是要把列表取出来 print(box) boxcv2.boxPoints(box) print(box) 把浮点型转为Int boxnp.intp(np.round(box)) 画轮廓 cv2.drawContours(im,[box],-1,(255,0,255),1,cv2.LINE_AA) cv2.imshow(最小外界矩形,im) cv2.waitKey(0) cv2.destroyAllWindows() 边界矩形--最大外接矩形
·直角矩形(最大外接矩形):不考虑物体的旋转。所以直角矩形的面积不是最小的。它是由函数x,y,w,hcv2.boundingRect(找到的。 ·令(xy)为矩形的左上角坐标而(wh)为矩形的宽度和高度。 import cv2 import numpy as np im cv2.imread(yy.png) 转灰度 im1cv2.cvtColor(im,cv2.COLOR_BGRA2GRAY) 找轮廓 contours,cv2.findContours(im1,cv2.RETRTREE,cv2.CHAINAPPROXNONE) 找顶点 x,y,w,hcv2.boundingRect(contours[0]) 画矩形 cv2.rectangle(im,(x,y),(xw,yh),(255,255,1),2,cv2.LINE_AA) 显示 cv2.imshow(im,im) cv2.waitKey(0) cv2.destroyAllWindows() 效果图一上图一样 背景分离方法这个很好玩可以识别在动的物体
bgsubcv2.createBackgroundSubtractorMOG2():创建背景减除器实例然后用bgsub.applay(img),再show一下bgsub就可以了。可以用来检测在动的物体
减除器实例.apply(image[, fgmask[, learningRate]]) - fgmask:计算前景掩码和更新背景。如果要更改用于更新背景模型的学习率可以通过将参数传递给apply方法来设置特定的学习率。learningRate该值位于0到1之间表示背景模型被学习或更新的速度。负数的参数值使算法采用自动选择的学习率。0意味着背景模型完全不进行更新保持初始状态;1则意味着背景模型在每一帧后都会根据新信息完全重新初始化。因此此参数控制了背景模型适应场景变化的敏感度和速度。
视频中动态的物体就是前景
静态的物体就是背景
参数说明 shape表示结构元素的形状可以是以下几种取值 cv2.MORPH_RECT矩形结构元素 cv2.MORPH_CROSS十字形结构元素 cv2.MORPH_ELLIPSE椭圆形结构元素 ksize表示结构元素的大小 anchor表示结构元素的锚点位置默认为(-1,-1)表示结构元素的中心
代码演示 视频中动态的物体就是 前景静态的物体就是背景
import cv2cap cv2.VideoCapture(0)# 创建背景减除器对象
bgsub cv2.createBackgroundSubtractorMOG2()while cap.isOpened():ret, frame cap.read()if not ret:break# 将视频中的每一帧图像应用背景减除器减除背景fgmask bgsub.apply(frame)cv2.imshow(win, fgmask)if cv2.waitKey(25) 27:cv2.destroyAllWindows()break效果过于离谱就不展示了只要动的地方就会变白视频哈