无重叠的圆检测

2023-12-11

我想在以下条件下进行圆检测:重叠圆将计为 1 个圆。

Particularly, when I do circle detection and put the letter "P" to every circle (actually they are pollen, or circle-like objects) for the image below enter image description here

它变成了

enter image description here

(同一张照片,但我不知道为什么当我上传到这里时它变成了水平)

但我只想每个圆圈有 1 个字母 P。调整半径也许是个好主意,但我还有很多其他照片要处理,所以我希望有一种方法可以忽略重叠。

这是我的代码:

import cv2
import numpy as np


path = "./sample.JPG"
font = cv2.FONT_HERSHEY_COMPLEX



def image_resize(image, width = None, height = None, inter = cv2.INTER_AREA):
    # initialize the dimensions of the image to be resized and
    # grab the image size
    dim = None
    (h, w) = image.shape[:2]

    # if both the width and height are None, then return the
    # original image
    if width is None and height is None:
        return image

    # check to see if the width is None
    if width is None:
        # calculate the ratio of the height and construct the
        # dimensions
        r = height / float(h)
        dim = (int(w * r), height)

    # otherwise, the height is None
    else:
        # calculate the ratio of the width and construct the
        # dimensions
        r = width / float(w)
        dim = (width, int(h * r))

    # resize the image
    resized = cv2.resize(image, dim, interpolation = inter)

    # return the resized image
    return resized


# In[22]:

iml = cv2.imread(path,cv2.IMREAD_COLOR)
img = image_resize(iml,width=960)


cimg = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cimg = cv2.medianBlur(cimg,5)

#Circle detection to detect pollen in big images, return the center's coordinates and radius of circles in array
circles = cv2.HoughCircles(cimg,cv2.HOUGH_GRADIENT,1,10,param1=15,param2=20,minRadius=10,maxRadius=25)
circles = np.uint16(np.around(circles))[0,:]


for i in circles:
     cv2.putText(img,'P',(i[0],i[1]), font, 0.5,(0,0,255),1,cv2.LINE_AA)

cv2.imwrite("./output.jpg",img)

我建议使用轮廓来代替。但是,如果您确实想使用 HoughCircles,请查看中的第四个参数function。改变这个,我可以摆脱重叠。此外,我对 HoughCircles 函数中的 canny 阈值参数进行了一些调整,直到获得所需的结果。我建议在得出结论之前充分了解参数。

Code:

import cv2
import numpy as np

arr = cv2.imread("U:/SO/032OR.jpg")
print(arr.shape)
imggray = cv2.cvtColor(arr, cv2.COLOR_BGR2GRAY)
# Not median blur 
imggray = cv2.GaussianBlur(imggray, (9,9),3)

circles_norm = cv2.HoughCircles(imggray, cv2.HOUGH_GRADIENT, 1, imggray.shape[0]/16, 
                                param1=20, param2=8, minRadius=15, maxRadius=30)
circles_norm = np.uint16(np.around(circles_norm))[0,:]

for i in circles_norm:
    center = (i[0], i[1])
    cv2.putText(arr, 'P', (i[0], i[1]), cv2.FONT_HERSHEY_COMPLEX, 0.5, 
               (0,0,255),1,cv2.LINE_AA)

Result:

Result

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无重叠的圆检测 的相关文章

随机推荐

  • css z-index 嵌套元素的问题

    我想在 z 平面上订购 3 个 HTML 元素 bank width 200px height 200px background color grey position absolute z index 100 transform tran
  • 表单关闭后从特定上下文运行代码?

    我想在此处创建的表单关闭后在此上下文中运行一些代码 Form1 Form1 new Form1 Form1 Show lt After this closes I want to run code from this context usi
  • 如何以编程方式更改第三台显示器

    当我使用笔记本电脑时 我使用 3 个显示器 笔记本电脑显示屏 第二台显示器 通过 VGA 连接 电视 通过 HDMI 连接 我的显卡不支持 3 个显示器 所以我不断地从 2 个显示器切换到 3 个显示器 当我在计算机上时 我使用第二个显示器
  • 在 Electron 中找不到模块

    我目前正在与 Babylon 一起开发 Electron 我发现这个仓库我基本上将其用作我自己项目的样板 一切都运行良好 直到我尝试添加jquery pep js用于其他需求 我一直犯这个错误 未捕获的错误 找不到模块 jquery pep
  • 如何在 JavaScript 中将麦克风静音

    所以我正在创建一个视频通话网络应用程序 我想在其中打开 关闭麦克风 打开 关闭视频功能 navigator mediaDevices getUserMedia video true audio true then stream gt con
  • 为什么在innerHTML 中使用Array#map 输出中的额外逗号?

    之前的帖子已经提到了如何toString 方法将在映射的每个项目之间放置逗号 并且可以通过使用来解决这个问题join 下面 尝试 2 在显示的对象之间添加了逗号 而尝试 1 则没有 为什么是这样 如何修改尝试 2 使其输出复制尝试 1 va
  • 用户定义类型作为 PostgreSQL 函数中的输入参数

    您好 我正在创建一个用于插入元数据的过程 我创建了类型 并在另一种类型中包含了一种类型 并且在过程中我对其进行迭代以获取值 由于我是 PostgreSQL 的新手 任何人都可以帮助我如何调用该过程 输入参数为类型 Create Type F
  • Netbeans 7.1.2 - 无法添加 glassfish 服务器 3.1.2

    我从下载 glassfish 服务器http glassfish java net downloads 3 1 2 2 final html并单独安装 现在我正在尝试将其添加到 Netbeans 中 但这不起作用 我做了以下步骤 以管理员身
  • 训练神经网络时资源耗尽 - keras

    我有一个包含 65668 个文件的数据集 我使用 Keras 作为 CNN 这些是我的层 embedding layer Embedding len word index 1 EMBEDDING DIM weights embedding
  • 张量流相当于 torch.gather

    我有一个形状张量 16 4096 3 我有另一个形状索引张量 16 32768 3 我正在尝试收集价值观dim 1 这最初是在 pytorch 中使用聚集功能如下所示 a shape 16L 4096L 3L idx shape 16L 3
  • 分割十六进制的最佳方法?

    一般来说 我对十六进制还很陌生 并且我有一个应用程序需要我分割十六进制数 例如 给定数字 0x607F 我需要返回高 0x60 或低 0x7F 字节 这是可能的实现 但感觉有点麻烦 在 python 中是否有更标准的方法来做到这一点 def
  • 使用 jq 将对象的嵌套 JSON 转换为数组到 bash 数组

    我正在做一些根本错误的事情 但只是看不出是什么 有人可以指出我在 jq 或 JSON 方面的错误吗 我在数组中包含以下子对象 entries profile name TesterRun1 download entries ENTRY A
  • 使用 SIMD,如何有条件地仅移动 alpha 通道值为 255 的像素?

    我目前正在向量化一些代码以使用 AVX2 内在函数存储 32 位像素数据 由于 AVX2 寄存器是 256 位 因此我可以同时操作 8 个像素 我目前的代码可以从一个缓冲区加载 8 个像素 然后将它们存储到另一个缓冲区 Load 256 b
  • 实体框架级联删除

    首先 如果我在这里遗漏了一些基本的东西 我深表歉意 但我是 EF 的新手 并且仍然首先考虑设置数据库代码 我遇到了与此类似的问题引入 FOREIGN KEY 约束可能会导致循环或多条级联路径但似乎无法从那里的评论中找出我需要对我的特定模型做
  • 如何在awk中将驼峰式字符串拆分为数组?

    如何使用 split 函数将驼峰式字符串拆分为 awk 中的数组 Input STRING camelCasedExample 期望的结果 WORDS 1 camel WORDS 2 Cased WORDS 3 Example 糟糕的尝试
  • 实体框架代码优先迁移认为存在不应该存在的更改

    我有一个网站和一个 Windows 服务 它们都引用同一个项目来获取实体框架数据上下文 每次启动 Windows 服务时 实体框架都会运行自动迁移 将数据库列之一从 NOT NULL 更改为 NULL 不进行其他更改 该列的属性被标记为 R
  • 如何使用R中的函数替换数据框中的字符值

    我有一个数据框 max1 max2 max3 max4 max5 max6 max7 max8 max9 max10 x9 x8 x7 x6 x10 x5 x4 x2 x1 x3 x5 x3 x4 x6 x10 x1 x7 x2 x8 x9
  • Pandas:混合数据类型的列;如何找到异常情况

    我有一个很大的数据框 当阅读它时 它给了我这样的消息 DtypeWarning 列 0 8 具有混合类型 导入时指定 dtype 或设置 low memory False 它应该是一列浮标 但我怀疑里面藏着几根绳子 我想识别它们 并可能删除
  • 当CPU处于内核模式时,它可以读写任何寄存器吗?

    当CPU处于内核模式时 它可以读写任何寄存器吗 或者是否有一些寄存器即使在内核模式下也无法访问 在 x86 上 没有分组寄存器 因此所有寄存器在架构上同时可见 是的 在内核模式 环 0 下 x86 可以写入任何寄存器 只要内核运行在64位模
  • 无重叠的圆检测

    我想在以下条件下进行圆检测 重叠圆将计为 1 个圆 Particularly when I do circle detection and put the letter P to every circle actually they are