利用opencv实现颜色跟踪

opencv识别颜色块并进行跟踪

 1.导入库

import cv2
import numpy as np

 2.读取目标颜色块的图像,并读取颜色BGR通道的值

img[1900,1400]  确定颜色区域某个位置点即可,可使用画图工具打开图像获取

img = cv2.imread('2.jpg')
blue,green,red = img[1900,1400]
print(blue,green,red)
color = np.uint8([[[blue, green, red]]])

 3.修改颜色通道

原因:在 HSV 颜色空间中要比在 BGR 空间
中更容易表示一个特定颜色。
通过计算可得到该颜色的上、下hsv范围
#颜色通道BGR 改为 HSV
hsv_color = cv2.cvtColor(color, cv2.COLOR_BGR2HSV)

#将值赋给hue
hue = hsv_color[0][0][0]

#算出lower and upper bounds
lower_bound = [hue - 10, 100, 100]
upper_bound = [hue + 10, 255, 255]

4.开启摄像头 (以下是对摄像头读取的每一帧图像进行处理)

完成了对颜色块的hsv读取,之后我们只需要对摄像头读取的图像每一帧进行一个扫描,找到该hsv阈值内的颜色块,并将它用框框框起来

cap = cv2.VideoCapture(0)

5.对图像做高斯平滑处理 

while True:
    ret, frame = cap.read()
    if ret!=1:
        break
    #高斯
    imgGaussian = cv2.GaussianBlur(frame,(5,5),0)

 6.创建一个掩码

掩码:目标颜色块为255(白),其他无关的全为0(黑)

# 将BGR图像转换为HSV图像
    hsv = cv2.cvtColor(imgGaussian, cv2.COLOR_BGR2HSV)

# 使用NumPy创建数组以保存下限和上限范围
    lower_range = np.array(lower_bound, dtype=np.uint8)
    upper_range = np.array(upper_bound, dtype=np.uint8)

# 创建一个掩码
    #掩码中255白色表示目标,
    mask = cv2.inRange(hsv, lower_range, upper_range)

 7.对掩码进行形态学操作

将错误识别的小点点滤除,减小干扰

    imgErode = cv2.erode(mask,(5,5),iterations = 5)
    opening = cv2.morphologyEx(imgErode, cv2.MORPH_OPEN, (5, 5))
    opening = cv2.morphologyEx(opening, cv2.MORPH_OPEN, (5, 5))
    opening = cv2.morphologyEx(opening, cv2.MORPH_OPEN, (5, 5)

 8.寻找轮廓

并设置一个范围,对可能出现的错误颜色区域不进行识别,因为背景环境有可能跟目标颜色块颜色相同,导致错误识别

    cnt,hierarchy = cv2.findContours(opening,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

    for i, c in enumerate(cnt):
        (x, y, w, h) = cv2.boundingRect(c)
        #轮廓中心点
        if w*h < 50:
            continue
        #cx = x+w/2
        #cy = y+h/2

        cv2.rectangle(frame,(x-20,y-20),(x+w+20,y+h+20),(0,0,255),3)

 9.显示图像

# 显示原始图像和掩码图像
    cv2.imshow('Canny',opening)
    cv2.imshow('img', frame)

# 等待用户按下 ESC 键
    k = cv2.waitKey(10)
    if k == 27:  # ESC键的ASCII码为27
        break

# 关闭所有窗口
cv2.destroyAllWindows()

到这就完成了,如果觉得对你有帮助,麻烦点个赞!

  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值