查找轮廓实现物体计数2

作者: 大龙10 | 来源:发表于2023-10-03 18:01 被阅读0次

书名:计算机视觉40例从入门到深度学习:OpenCV-Python
作者:李立宗
出版社:电子工业出版社
出版时间:2022-07-01
ISBN:9787121436857


一、zip函数

  • 有时,在循环中需要同时遍历多个不同的迭代对象,如同时遍历两个不同的元组。对于这种情况,可以使用zip函数将多个迭代对象组合,然后实现遍历。
a=("汪淼","罗辑","程心","章北海","常伟思")
b=("Python","OpenCV","计算机视觉","机器学习","深度学习")
for n,i,j in zip(range(len(a)),a,b):
    print(n,i,j)

运行结果

二、预处理

  • 实践中的图像往往是比较复杂的,如果想分离出前景和背景,需要进行大量的预处理工作。

  • 预处理在图像处理过程中发挥着非常关键的作用,常用的预处理包括色彩空间转换、形态学处理(腐蚀、膨胀等)、滤波处理、阈值处理等。

    • 色彩空间转换:
      会选择在特定色彩空间内进行图像处理。最常用的转换是将彩色图像转换为灰度图像。
    • 阈值处理:
      将彩色图像或灰度图像处理为二值图像。
    • 形态学处理:
      形态学处理的基本操作是腐蚀、膨胀。腐蚀操作不仅能去除噪声,还能将连接在一起的不同图像分离。膨胀操作在一定程度上能够使腐蚀后的图像恢复为原始形状、原始大小。
    • 滤波处理:
      滤波处理主要是为了去除图像内的噪声,如细小的斑点等。
  • 在预处理的基础上,可以进行计数,并将计数结果显示在原始图像上,相应流程图如图所示。

三、程序

检测到共29个
import cv2

img = cv2.imread('d:\\cells.jpg')
cv2.imshow("cells",img)

gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 色彩空间转换:彩色图像一灰度图像
ishow=img.copy()
ret, binary  = cv2.threshold(gray,0,100,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU) # 阙值处理

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3)) #核

erosion=cv2.erode(binary,kernel,iterations=3)    # 腐蚀操作
dilation=cv2.dilate(erosion,kernel,iterations=3) # 膨胀操作
gaussian = cv2.GaussianBlur(erosion,(3,3),0)    # 高斯滤波

# ================查找所有轮廓======================
contours,hirearchy=cv2.findContours(gaussian,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
contoursOK=[]
for i in contours:
    if cv2.contourArea(i)>30:
        contoursOK.append(i)
draw=cv2.drawContours(img,contoursOK,-1,(0,255,0),2)

for i,j in zip(contoursOK,range(len(contoursOK))):
    M = cv2.moments(i)
    cX=int(M["m10"]/M["m00"])
    cY=int(M["m01"]/M["m00"])
    cv2.putText(draw, str(j), (cX,cY),cv2.FONT_HERSHEY_PLAIN,1.5,(0,0,255),2)  # 在质心描绘数字

# ============显示图片====================
cv2.imshow("draw",draw)
print(len(contoursOK))

cv2.waitKey()
cv2.destroyAllWindows()

相关文章

  • 静物素描的线性表现

    2018.3.13 录播教师,授课:李竹 一、轮廓的认识 外轮廓 轮廓特征 辨认物体最直观的感受 例1: 例2: ...

  • OpenCV-Python学习(十五):轮廓

    ...待更新...目录: 1.轮廓查找与绘制 2.面积,周长,重心 3.轮廓近似: approxPolyDP() ...

  • OpenCV 查找轮廓

    本文将结合实例代码,介绍 OpenCV 如何查找轮廓、获取边界框。 代码: contours.py[https:/...

  • Opencv第四课--轮廓检测

    轮廓检测 轮廓检测是检测图像中物体的轮廓。简单例子: 函数cv2.findContours()有三个参数。第一个是...

  • 第七章 漫反射 (二)

    形状和细节 我们对物体体积的把握主要是通过漫反射实现的。直接反射是不能提供有关物体体积信息的,轮廓阴影的最主要的原...

  • autojs查找图片相似轮廓

    牙叔教程 简单易懂 使用场景 查找和已有图片相似的轮廓 效果展示 查找轮廓结果 原图 要查找的图片 autojs版...

  • day14 - find查找

    为什么要有文件查找 2.windows如何实现文件查找? 3.linux如何实现文件查找? 4.find命令查找语...

  • 图像轮廓之查找并绘制轮廓

    《OpenCV轻松入门:面向Python》读书笔记作者:李立宗出版社:电子工业出版社出版时间:2019-05 第1...

  • C++ opencv-3.4.1 提取不规则物体的轮廓

    在学习opencv的时候,对一张照片,需要标注照片上物体的不规则轮廓。 如图: 使用opencv进行物体的轮廓处理...

  • UnityShader(五):纹理之法线纹理、单张纹理及遮罩纹理

    在游戏中,我们除了能看到游戏物体的形体轮廓,还能看到物体的一些具体外观,包括颜色,凹凸等。而实现这一步的就是使用*...

网友评论

    本文标题:查找轮廓实现物体计数2

    本文链接:https://www.haomeiwen.com/subject/ndvebdtx.html