文章目录

  • 一、一种色块的监测追踪以及打印中心坐标
  • 二、两种色块的监测追踪以及打印中心坐标

一、一种色块的监测追踪以及打印中心坐标

from collections import  deque
import numpy as np
import cv2
import time  redLower = np.array([0, 80, 50]) #设定红色阈值,HSV空间
redUpper = np.array([8, 255, 220])
mybuffer = 64  #初始化追踪点的列表
pts = deque(maxlen=mybuffer)
#打开摄像头
if __name__ == '__main__':cv2.namedWindow("camera",1)video="http://192.168....:8081/"   #自己IP摄像头的地址camera =cv2.VideoCapture(video)
time.sleep(3)#等待两秒while True:             #遍历每一帧,检测红色瓶盖#读取帧(ret, frame) = camera.read()if not ret:print ('No Camera')break  hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)   #转到HSV空间   mask = cv2.inRange(hsv, redLower, redUpper)  #根据阈值构建掩膜mask = cv2.erode(mask, None, iterations=2)  #腐蚀操作    mask = cv2.dilate(mask, None, iterations=2)  #膨胀操作,其实先腐蚀再膨胀的效果是开运算,去除噪点 cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]  #轮廓检测   center = None  #初始化瓶盖圆形轮廓质心#如果存在轮廓  if len(cnts) > 0:  #找到面积最大的轮廓  c = max(cnts, key = cv2.contourArea)  #确定面积最大的轮廓的外接圆  ((center_x, center_y), radius) = cv2.minEnclosingCircle(c)  #计算轮廓的矩  M = cv2.moments(c)  #计算质心  cv2.circle(frame, (int(center_x), int(center_y)), int(radius), (0, 255, 255), 2)  cv2.circle(frame, center, 5, (0, 0, 255), -1)print('红色色块的中心坐标',(int(center_x),int(center_y)))cv2.imshow('Frame', frame)      k = cv2.waitKey(5)&0xFF  #键盘检测,检测到esc键退出if k == 27:  break
camera.release()  #摄像头释放
cv2.destroyAllWindows()#销毁所有窗口 


对于IP摄像头陌生的同学可以看一下我之前的一篇博客https://blog.csdn.net/weixin_45870610/article/details/104970299

二、两种色块的监测追踪以及打印中心坐标

from collections import  deque
import numpy as np
import cv2
import time  redLower = np.array([156, 43, 46]) #设定红色阈值,HSV空间
redUpper = np.array([180, 255, 255])
blueLower = np.array([100, 43, 46])
blueUpper = np.array([124, 255, 255])
mybuffer = 64  #初始化追踪点的列表
pts = deque(maxlen=mybuffer)
if __name__ == '__main__':cv2.namedWindow("camera",1)video="http://192.168....:8081/" #这里要改成你自己的IP摄像头的地址  camera =cv2.VideoCapture(video)
time.sleep(3)#等待两秒
while True:             #遍历每一帧,检测红色瓶盖#读取帧(ret, frame) = camera.read()if not ret:print ('No Camera')break  hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)   #转到HSV空间   mask1 = cv2.inRange(hsv, redLower, redUpper)  #根据阈值构建掩膜mask2 = cv2.inRange(hsv, blueLower, blueUpper)    mask1 = cv2.erode(mask1, None, iterations=2)  #腐蚀操作mask2 = cv2.erode(mask2, None, iterations=2)    mask1 = cv2.dilate(mask1, None, iterations=2)#膨胀操作,其实先腐蚀再膨胀的效果是开运算,去除噪点mask2 = cv2.dilate(mask2, None, iterations=2)    cnts1 = cv2.findContours(mask1.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]  #轮廓检测cnts2 = cv2.findContours(mask2.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]    center = None  #初始化瓶盖圆形轮廓质心#如果存在轮廓  if len(cnts1) > 0:    c = max(cnts1, key = cv2.contourArea) #找到面积最大的轮廓   ((red_x, red_y), radius) = cv2.minEnclosingCircle(c)  #确定面积最大的轮廓的外接圆  M = cv2.moments(c)  #计算轮廓的矩  cv2.circle(frame, (int(red_x), int(red_y)), int(radius), (0, 255, 255), 2)  #计算质心cv2.circle(frame, center, 5, (0, 0, 255), -1)print('红:',(int(red_x),int(red_y)))if len(cnts2) > 0:    c = max(cnts2, key = cv2.contourArea)  ((blue_x, blue_y), radius) = cv2.minEnclosingCircle(c)  M = cv2.moments(c)  cv2.circle(frame, (int(blue_x), int(blue_y)), int(radius), (0, 0, 255), 2)  cv2.circle(frame, center, 5, (255, 0, 0), -1)print('蓝:',(int(blue_x),int(blue_y)))    cv2.imshow('Frame', frame)      k = cv2.waitKey(5)&0xFF  #键盘检测,检测到esc键退出if k == 27:  break
camera.release()  #摄像头释放
cv2.destroyAllWindows()#销毁所有窗口 '''
三种色块的:可以把这些加进去,道理是相同的
greenLower = np.array([35, 43, 46])
greenUpper = np.array([77, 255, 255])
mask3 = cv2.inRange(hsv, greenLower, greenUpper)
mask3 = cv2.erode(mask3, None, iterations=2)
mask3 = cv2.dilate(mask3, None, iterations=2)
cnts3 = cv2.findContours(mask3.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]
if len(cnts3) > 0:    c = max(cnts3, key = cv2.contourArea)  ((green_x, green_y), radius) = cv2.minEnclosingCircle(c)  M = cv2.moments(c)  cv2.circle(frame, (int(green_x), int(green_y)), int(radius), (255, 0, 0), 2)  cv2.circle(frame, center, 5, (0, 255, 0), -1)print('绿:',(int(green_x),int(green_y)))
'''


这里大家要尽量找圆形的物体,家里实在找不到圆绿的了哈哈,不规则的物体的话得出的数据还是会有误差的;还有一种情况是没有办法识别出红色,但你觉得他就是红色的物体,那你可以适当调整一下HSV值,就没问题了

哈哈,一看就是初级菜鸟写的代码,希望对大家有所帮助,因为我最终的目标不是识别色块,所以还要进行更进一步的学习,所以这个博客之后还会更新,尽请期待吧。
有什么需不对的,或者需要改进的地方,还希望各位大神可以指正。

Python:色块检测追踪以及打印中心坐标相关推荐

  1. Python计算机视觉:在阈值化图像中使用center_of_mass()函数寻找每个物体的中心坐标

    Python计算机视觉:在阈值化图像中使用center_of_mass()函数寻找每个物体的中心坐标 <Python计算机视觉>第一章练习第七题: 使用形态学操作处理阈值化图像.在发现一些 ...

  2. 使用Python、OpenCV计算轮廓的中心

    1. 使用Python.OpenCV计算轮廓的中心并标记 2. 使用Python.OpenCV检测轮廓的形状并标记 3. 使用颜色通道统计信息来标记形状的实际颜色并标记 本博客的目标:(1)检测图像中 ...

  3. K210实现多色块检测功能

    1 方案思路 颜色阈值检测 要实现的是多色检测,我选择的是黄色和红色,要通过阈值管理器先定义这俩颜色对应的阈值 yellow_threshold = (49, 100, 26, -18, 2, 72) ...

  4. openmv传承(二):色块检测

    一.前言: 这个色块检测真的没什么可以说的,非常简单烧一下例程,改一下阈值就可以使用 二.代码展示 # 色块监测 例子 # # 这个例子展示了如何通过find_blobs()函数来查找图像中的色块 # ...

  5. Sqlmap速查表/功能移植/Python批量检测SQL注入

    title: Sqlmap速查表与Python进行功能移植 copyright: true top: 0 date: 2021-02-27 11:59:00 tags: [扫描注入,注入,sqlmap ...

  6. 【GUI界面】基于Python的WSG84三点定位系统(经纬度坐标与平面坐标转换法求解)

    [GUI界面]基于Python的WSG84三点定位系统(经纬度坐标与平面坐标转换法求解) 方法汇总: blog.csdn.net/weixin_53403301/article/details/128 ...

  7. RIKIBOT使用系列-基于Opencv HSV的色块检测

    目录 一. 简介 二.查找色值 1.摄像头的角度调 2.启动检测与查找 三. 验证HSV色值 1.写入色值到文件 2.启动检测 四.交流方式 一. 简介 这里学习一下如何用摄像头检测HSV色值,Ope ...

  8. 【优秀课设】基于OpenCV-Python的摄像头人脸检测追踪控制系统

    基于OpenCV-Python的摄像头人脸检测追踪控制系统 资源: download.csdn.net/download/weixin_53403301/25496828 采用OpenCV-Pytho ...

  9. 目标检测学习笔记——yolov5的坐标输出形式和损失函数计算

    一般目标检测的坐标输出都是pred[:,:4],其中pred[:,0]pred[:,1]是中心坐标的偏移量:pred[:,2]pred[:,3]是宽和长的偏移量,要通过公式转化成Xmin,Ymin,X ...

最新文章

  1. Nginx之rewrite:域名与二级目录之间的跳转
  2. ajax返回值怎么取出来_螺丝断孔里了,怎么取出来?
  3. poj 2415(BFS)
  4. 改造消费方解决地址硬编码问题
  5. 第四章 纤维结构对染色性能的影响单元测验
  6. 一步步编写操作系统 14 CPU与外设通信——IO接口 上
  7. php exec执行多条命令,小技巧:在PHP中调用多条shell指令
  8. 使用selenium启动(无界面)浏览器的隐私模式
  9. 华为云 GaussDB 数据库,会是新的国产之光吗?
  10. ubuntu安装cuda(转精华)
  11. 移动端如何定义字体font-family
  12. 计算机enter代表什么意思,enter是什么意思
  13. Linux服务器网卡驱动安装及故障排除
  14. Python 获取Windows关机消息
  15. 普度大学计算机科学博士,Purdue的CS「普渡大学西拉法叶分校计算机科学系」
  16. 最新Discuz手机模板NVBING5手机版源码+可封装APP
  17. 聚焦终端边缘AI芯片 放弃走云端路线的耐能到底行不行?
  18. 东风岚图配谈“梦想”吗?
  19. PLEG is not healthy: pleg was last seen active 3m45.252087921s ago; threshold is 3m0s
  20. 双通道内存和单通道的区别是什么

热门文章

  1. 向量叉乘转为反对称矩阵相乘
  2. IT行业如何辨别是不是正规无抵押小额贷款
  3. 使用MindStudio进行语义分割应用开发
  4. linux下 文件排序,如何在Linux中对文件进行排序 (GUI和Shell)
  5. Apriori算法例题
  6. 前端开发:JS中的Window对象详解
  7. 轻享 | 极客 CTO 的成长复盘
  8. Android下载demo
  9. 微信小程序开发工具调试界面鼠标看不见
  10. npm ERR vue-manage@0.1.0 serve: vue-cli-service serve