简单的物体(圆形)检测与追踪

简单的物体(圆形)检测与追踪

总的是用颜色来充当减少噪音的主要因素,其中均值滤波和开、闭运算是为了减少反光而做的一种测试,不多说直接代码:

import numpy as np
import cv2

 
src = cv2.imread('ball.JPG')
hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)  # 转换为HSV空间
# 设置阈值,作用和对颜色进行限制差不多,但是没有下面对颜色限制精确
(_, mask) = cv2.threshold(hsv, 35, 255, cv2.THRESH_BINARY)

# 设定绿色的阈值下限,设定绿色的阈值上限,消除噪声,设定掩膜取值范围,是为了把hsv空间不属于阈值范围的颜色消除
#lower_green = np.array([25, 40, 100])  
#upper_green = np.array([77, 255, 255])  
#mask = cv2.inRange(hsv, lower_green, upper_green)   


#核数可改
#cv2.blur()均值滤波
blurred = cv2.blur(mask, (9, 9))

#中值滤波
# blurred=cv2.medianBlur(mask,7)

#高斯滤波
# blurred=cv2.GaussianBlur(mask,(7,7),0,0)

#方框滤波
# blurred=cv2.boxFilter(mask,-1,(14,14),normalize=False)



kernel = np.ones((9,9),np.uint8)

#cv2.MORPH_CLOSE 闭运算,先膨胀在腐蚀 cv2.MORPH_OPEN开运算,先腐蚀在膨胀
opening = cv2.morphologyEx(blurred, cv2.MORPH_CLOSE, kernel)  # 形态学开运算
# opening = cv2.morphologyEx(opening, cv2.MORPH_CROSS, kernel)  # 形态学开运算
# opening = cv2.morphologyEx(opening, cv2.MORPH_CROSS, kernel)  # 形态学开运算
# opening = cv2.morphologyEx(opening, cv2.MORPH_CROSS, kernel)  # 形态学开运算
# opening = cv2.morphologyEx(opening, cv2.MORPH_CROSS, kernel)  # 形态学开运算
# opening = cv2.morphologyEx(opening, cv2.MORPH_CROSS, kernel)  # 形态学开运算
# opening = cv2.morphologyEx(opening, cv2.MORPH_CROSS, kernel)  # 形态学开运算
# opening = cv2.morphologyEx(opening, cv2.MORPH_OPEN, kernel)  # 形态学开运算

# opening = cv2.morphologyEx(opening, cv2.MORPH_CROSS, kernel)  # 形态学开运算
# opening = cv2.morphologyEx(opening, cv2.MORPH_CROSS, kernel)  # 形态学开运算
# opening = cv2.morphologyEx(opening, cv2.MORPH_CROSS, kernel)  # 形态学开运算

# opening = cv2.morphologyEx(opening, cv2.MORPH_CROSS, kernel)  # 形态学开运算

# opening = cv2.morphologyEx(opening, cv2.MORPH_CROSS, kernel)  # 形态学开运算
# opening = cv2.morphologyEx(opening, cv2.MORPH_CROSS, kernel)  # 形态学开运算
# opening = cv2.morphologyEx(opening, cv2.MORPH_OPEN, kernel)  # 形态学开运算



#双边滤波
bila = cv2.bilateralFilter(opening, 8, 350, 350)  # 双边滤波消除噪声
#轮廓检测
edges = cv2.Canny(opening, 35, 20)  

#霍夫圆检测
circles = cv2.HoughCircles(
            edges, cv2.HOUGH_GRADIENT, 1, 1000, param1=90, param2=10, minRadius=1, maxRadius=50)
if circles is not None:  
    for circle in circles[0]:
        #  获取圆的坐标与半径
        x = int(circle[0])
        y = int(circle[1])
        r = int(circle[2])
        cv2.circle(src, (x, y), r, (0, 0, 0), 5)  # 标记圆
        cv2.circle(src, (x, y), 4, (155,155, 155), 2)  # 标记圆心
        cv2.putText(src, None, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 0), 1, cv2.LINE_AA, 0)  # 显示圆心位置



#,'erosion',erosion,'thresh',thresh
titles=['src','hsv','mask','blurred','opening','bila','edges']
images=[src,hsv,mask,blurred,opening,bila,edges]
plt.figure(figsize=(40,40))
for i in range(7):
    plt.subplot(4,4,i+1)
    plt.imshow(images[i])
    plt.title(titles[i])
    plt.xticks([])
    plt.yticks([])
plt.show()

在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值