首页 > 其他分享 >OpenCV与AI深度学习 | 实战 | OpenCV传统方法实现密集圆形分割与计数(详细步骤 + 代码)

OpenCV与AI深度学习 | 实战 | OpenCV传统方法实现密集圆形分割与计数(详细步骤 + 代码)

时间:2024-09-03 21:52:12浏览次数:11  
标签:gray img 计数 AI imshow cv2 OpenCV thres lap

本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。

原文链接:实战 | OpenCV传统方法实现密集圆形分割与计数(详细步骤 + 代码)

导  读

    本文主要介绍基于OpenCV传统方法实现密集圆形分割与计数应用,并给详细步骤和代码。 

背景介绍

    实例图片来源于网络,目标是分割下图中圆形目标并计数。

    本文实现效果如下:

 实现步骤

  【1】灰度转换 + 均值滤波 + 二值化,得到参考背景

img = cv2.imread('src.jpg')
cv2.imshow("src",img)

gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow("gray",gray)

blur = cv2.medianBlur(gray,7)
cv2.imshow("blur",blur)

_,thres = cv2.threshold(gray, 199, 255, cv2.THRESH_BINARY_INV )
cv2.imshow("thresh",thres)

图像:

  【2】对灰度图做拉普拉斯变换,提取边缘,并做阈值分割

lap =cv2.Laplacian(gray, -1, ksize = 5)
cv2.imshow("laplacian",lap)
_,lap_thres = cv2.threshold(lap, 250, 255, cv2.THRESH_BINARY)
cv2.imshow("lap_thres",lap_thres)

图像:

  【3】将上图做膨胀操作,增粗边缘

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))
dilation = cv2.dilate(lap_thres,kernel,iterations = 1)
cv2.imshow("dilation",dilation)

图像:

  【4】将第【1】步中的二值图与上图做差,腐蚀去除噪点,凸显圆形内部区域:

diff = thres - dilation
erode = cv2.erode(diff,kernel,iterations = 1)
cv2.imshow("diff",erode)

图像:

  【5】轮廓分析:获取最小外接圆和轮廓面积,筛选轮廓面积/圆面积>0.2的有效轮廓,绘制外接圆标注,并计数。

contours,hierarchy = cv2.findContours(erode, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
count = 0  
for i in range(0,len(contours)):
    center,radius = cv2.minEnclosingCircle(contours[i])
    if radius > 10:
        area = cv2.contourArea(contours[i])
        if area / (math.pi * radius * radius) > 0.2:
            count += 1
            cv2.circle(img,(int(center[0]),int(center[1])),int(radius),colors[i%9],-1)
strCount = 'count=%d'%count
cv2.putText(img,strCount,(10,100),0,2,(255,255,0),3)

    最终结果如下:

总 结

  本例中核心思想是用目标前景区域(二值化得到)和边缘区域(拉普拉斯变化得到,不用Canny)做差得到圆内部区域轮廓,然后做后续处理。当然也可以使用距离变换 + 分水岭方法来实现,有兴趣的话可以自己尝试一下。

THE END !

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

标签:gray,img,计数,AI,imshow,cv2,OpenCV,thres,lap
From: https://blog.csdn.net/csdn_xmj/article/details/141712918

相关文章

  • Datawhale X 李宏毅苹果书 AI夏令营-深度学习入门班-task3-机器学习实践方法论
    引入在简单了解到机器学习的过程,以及模型函数的优化升级之后,我们需要根据一些方法论,解决模型实践过程中会遇到的问题,学会分析模型数据,按照正确的路径优化模型,减少测试误差(TestingLoss)。实践方法论整体框架下图是实践方法论的整体框架,下文会根据逻辑顺序一一介绍。step......
  • 利用LangChain构建MySQL数据库问答代理
    引言随着自然语言处理技术的飞速发展,尤其是大型语言模型(LLM)的应用日益广泛,人们对于如何更高效地与这些模型交互产生了浓厚的兴趣。LangChain是一个旨在简化与语言模型集成的开源框架,它使得开发者能够轻松地构建出强大的应用程序。本文将介绍如何使用LangChain结合MySQL数据......
  • 《深度学习》OpenCV 图像轮廓检测、轮廓处理及代码演示
    目录一、图像轮廓检测1、边缘检测和轮廓检测2、常用的图像轮廓检测方法包括:1)基于梯度的方法2)基于边缘检测器的方法3)基于阈值的方法3、查找轮廓的函数4、轮廓的绘制5、轮廓特征1)轮廓面积2)轮廓周长6、轮廓近似7、模型匹配二、轮廓检测实现1、查找轮廓API解析1)用......
  • 《深度学习》OpenCV轮廓检测 轮廓近似、模板匹配 解析及实现
    一、轮廓近似1、什么是轮廓近似        指对轮廓进行逼近或拟合,得到近似的轮廓。在图像处理中,轮廓表示了图像中物体的边界,因此轮廓近似可以用来描述和识别物体的形状。2、参数解析1)用法importcv2approx=cv2.approxPolyDP(curve,epsilon,closed)2)参数 ......
  • Datawhale X 李宏毅苹果书 AI夏令营 Task3-机器学习实践方法论
    在上一章介绍完机器学习模型后,我们接着讨论模型中可能存在的一些问题。首先我们需要明确一件事,就是Kaggle上的测试结果不好,可能有多个原因。第一,如果模型在运行训练模型时,所产生的损失就很大,那么有可能是模型偏差(modelbias)或优化(optimization)问题。第二,如果模型在运行训......
  • Datawhale X 李宏毅苹果书 AI夏令营-深度学习入门篇-Task3《深度学习详解》- 实践方法
     核心学习目标:通过《深度学习详解》和李宏毅老师21年的机器学习课程视频,入门机器学习,并尝试学习深度学习,展开代码实践(选修)。该书保留了李宏毅老师公开课中大量生动有趣的例子,帮助读者从生活化的角度理解深度学习的概念、建模过程和核心算法细节,包括卷积神经网络、Transform......
  • 使用docker部署tensorrtllm推理大模型baichuan2-7b
    简介大模型的推理框架,我之前用过vllm和mindie。近期有项目要用tensorrtllm,这里将摸索的过程记录下,特别是遇到的问题。我的环境是Linux+rt3090准备docker环境本次使用docker镜像部署,需要从网上拉取:dockerpullnvcr.io/nvidia/tritonserver:24.08-trtllm-python-py3Th......
  • AI大模型系列之大模型原理科普(深度万字好文)
    天地转,光阴迫。一万年太久,只争朝夕。数字时代,要顺势而为,让我们系统性掌握AI大模型家族的技术本领,成为行业翘楚!今天,我们突然发现,AI可以帮忙生成文字、图片、音频和视频等等内容了,而且让人难以分清背后的创作者到底是人类还是AI。这些AI生成的内容被叫做AIGC,它是AIgenerated......
  • 数据库实验 SQL server sduwh caohai
    问题一:根据E-R图写出关系模式,标注主键和外键 学生关系模式:Student(StudentNum,StudentName,StudentSex,StudentAge,StudentPhone,StudentBrith,Speciality)其中主键为学号StudentNum,没有外键。课程关系模式:Course(Coursenum,CourseName,Credit,Classhour,ClassType)其中主键为......
  • opencv学习:转换为二值图像,均值滤波、高斯模糊和中值滤波
    "Threshold"在图像处理中是一个非常重要的概念,它涉及到将图像的像素值转换为二值图像(即图像中的像素值只有两种可能:0或1,或者在某些情况下是其他两个指定的值)。通过设置一个阈值(threshold),可以将图像中的像素分为两类:一类是高于阈值的像素,另一类是低于或等于阈值的像素。以......