当前位置:网站首页>Opencv实现对象跟踪

Opencv实现对象跟踪

2022-06-27 05:14:00 Keep_Trying_Go

1.轮廓查找和轮廓绘制

https://mydreamambitious.blog.csdn.net/article/details/125339604


2.高斯去噪

https://mydreamambitious.blog.csdn.net/article/details/125203273


3.腐蚀和膨胀

https://mydreamambitious.blog.csdn.net/article/details/125265431


4.cv2.inRange函数

作用:rgb颜色空间转换到hsv颜色空间,颜色去除白色背景部分
参数:
第一个参数:hsv指输入的原图;
第二个参数:lower_red指的是图像中低于这个lower_red的值,像素值变为0;
第三个参数:upper_red指的是图像中高于这个upper_red的值,像素值变为0;


5.cv2.minEnclosingCircle函数

函数作用:得到包含二维点集的最小圆
参数:
InputArray points:输入的二维点集;
Point2f& center:表示输出的圆形的中心坐标,是float型;
float& radius:输出的最小圆的半径,是float型;


6.cv2.moments函数

求轮廓的矩:
mu = cv.moments(contour) #contour是一个轮廓
cx = mu[‘m10’] / mu[‘m00’] #轮廓contour的质心的横坐标
cy = mu[‘m01’] / mu[‘m00’] #轮廓contour的质心的纵坐标

https://blog.csdn.net/Caesar6666/article/details/103257632


7.代码实战

import os
import cv2
import numpy as np

cap=cv2.VideoCapture(0)
#设置RGB->HSV的低阈值和高阈值
Obj_low=np.array([0,0,0])
Obj_high=np.array([179,157,79])

while cap.isOpened():
    OK,frame=cap.read()
    if OK==False:
        break
    #对图片进行翻转,Opencv读取的图片和我们正常的显示方式相反
    img=cv2.flip(src=frame,flipCode=2)
    img=cv2.resize(src=img,dsize=(600,600))
    #对图像进行高斯处理
    gauss=cv2.GaussianBlur(src=img,ksize=(3,3),sigmaX=0)
    #将图像转换为灰度图
    gray=cv2.cvtColor(src=gauss,code=cv2.COLOR_BGR2HSV)
    inrange=cv2.inRange(src=gray,lowerb=Obj_low,upperb=Obj_high)
    #对图像进行腐蚀
    kernel=cv2.getStructuringElement(shape=cv2.MORPH_RECT,ksize=(3,3))
    erode=cv2.erode(src=inrange,kernel=kernel,iterations=2)
    #对图形进行膨胀
    dilate=cv2.dilate(src=erode,kernel=kernel,iterations=2)
    #查找轮廓
    contours,hierarchy=cv2.findContours(image=dilate,mode=cv2.RETR_TREE,
                                        method=cv2.CHAIN_APPROX_SIMPLE)
    maxArea=0
    index=0
    length=len(contours)
    if length>0:
        for i in range(length):
            #计算轮廓的面积
            area=cv2.contourArea(contours[i])
            if area>maxArea:
                maxArea=area
                index=i
        #得到包含最小点集的圆
        ((x,y),radius)=cv2.minEnclosingCircle(contours[index])
        M=cv2.moments(contours[index])
        center=(int(M['m10']/M['m00']),int(M['m01']/M['m00']))

        if radius>5:
            cv2.circle(img=img,center=center,radius=2,
                       color=(0,255,0),thickness=-1)
            cv2.circle(img=img,center=center,radius=int(radius),
                       color=(0,0,255),thickness=3)

    cv2.imshow('image',img)
    if cv2.waitKey(1)&0xFF==27:
        break
cv2.destroyAllWindows()


if __name__ == '__main__':
    print('Pycharm')

原网站

版权声明
本文为[Keep_Trying_Go]所创,转载请带上原文链接,感谢
https://mydreamambitious.blog.csdn.net/article/details/125471084