圆检测学习笔记

2023-11-01

目录

边缘检测,再检测圆 

霍夫圆检测


转自:

深度OpenCV开发之精准找圆

 

GitHub - zikai1/CircleDetection: circle detection, inscribed triangles, image processing, Hough transform

 有图片资源:

本机:\CircleDetection-master

dataset Mini.zip

GitHub - zhouqun92/Circle-detect-based-on-Hough-Transform-: Preference :"Size invariant circle detection"

边缘检测,再检测圆 

GitHub - starbead/opencv_circlefind: using canny and houghcircles for find coins

https://github.com/mdNzaman/Coin-Detection-using-hough-Circles-master

圆标注:

python opencv 圆形roi_jacke121的专栏-CSDN博客

有数据:

GitHub - AlanLuSun/Circle-detection: Circle detection/circle detector by arc-support line segments. The source code for IEEE ICIP paper.

支持Windows:

https://github.com/vpplatonov/ellipse_detector

在原作者上修改了一下, 原版地址:

GitHub - dlut-dimt/ellipse-detector

原作者的不乱码,

vpplatonov的代码中文乱码,导致编译失败

比如报错:出现很多未声明的标识符:

因为里面的中文乱码了,把乱码删掉可以。

但是程序运行结果不对,对着原版把注释拷贝过来,

用notepad++,把右下角改为如下图:

但是中文注释正常显示,就能编译成功了。 

c++圆检测,圆弧检测,

基于OpenCV和Python的图像圆弧检测 - 问答 - Python中文网

python opencv 工业园检测:

工业圆型检测_楠梧斋的博客-CSDN博客

 https://github.com/memory-overflow/standard-ellipse-detection

由于业界没有好的椭圆检测算法,所以我写一个库用来做椭圆检测。这个库对于图像中的标准、明显、完整、大小在 100x100 像素以上的椭圆的检测效果非常好,速度也很快。 这个库的实现参考了论文 https://arxiv.org/pdf/1810.03243v4.pdf。

ubuntu 的使用方法

  1. 首先需要安装两个库的支持,opencv 库,这个可以搜一下网上的教程安装一下。第二个库是一个矩阵运算的库lapack,需要源码安装。 先下载lapack源码,这个库是gfortran写的,所以要先sudo apt-get install gfortran安装gfortran。 然后
tar -xzvf lapack-3.9.1.tar.gz && cd lapack-3.9.1
mkdir build && cd build
cmake ..
make -j7
sudo make install
sudo ldconfig
cd ..
sudo cp LAPACKE/include/*.h /usr/local/include/
  1. 安装ellipse-detection库
git clone https://github.com/memory-overflow/standard-ellipse-detection.git
cd standard-ellipse-detection
mkdir build && cd build
cmake ..
make
sudo make install

效果未测:

识别圆的强化RANSAC算法_JY_JOKE的博客-CSDN博客_ransac 圆

椭圆检测:

说明,matlab的:

【MATLAB】椭圆检测(Ellipse Detection)算法(含代码)_HPC_ZY-CSDN博客_matlab椭圆检测

High-quality-ellipse-detection/generateEllipseCandidates.cpp at master · AlanLuSun/High-quality-ellipse-detection · GitHub

c++调用matlab的代码:

C++调用Matlab的.m编程文件_蓦然回首-CSDN博客

【转】C++调用Matlab的.m文件_weixin_34354945的博客-CSDN博客

霍夫圆检测:

霍夫圆检测_jacke121的专栏-CSDN博客_霍夫圆检测

tf模型:

GitHub - mhamdan91/Circle_detector: Detect complete and incomplete circular shapes in noisy images

输入时200*200,只能检测提供的圆,真实场景效果不好

    params=(125, 117 , 7)
    results=[]
    img=cv2.imread(R"C:\Users\002.jpg")
    img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    img_o=cv2.resize(img,(200,200))
    img=img_o.astype(np.float)/255
    detected = find_circle(img)


    draw_circle(img_o, int(detected[0]), int(detected[1]), int(detected[2]))
    cv2.imshow("asdf",img_o)
    cv2.waitKey()

import numpy as np
from shapely.geometry.point import Point
from skimage.draw import circle_perimeter_aa
from tqdm import tqdm
import matplotlib.pyplot as plt
import cv2
import predictor


def draw_circle(img, row, col, rad):
    rr, cc, val = circle_perimeter_aa(row, col, rad)
    valid = (
        (rr >= 0) &
        (rr < img.shape[0]) &
        (cc >= 0) &
        (cc < img.shape[1])
    )
    img[rr[valid], cc[valid]] = val[valid]


def noisy_circle(size, radius, noise):
    img = np.zeros((size, size), dtype=np.float)

    # Circle
    row = np.random.randint(size)
    col = np.random.randint(size)
    rad = np.random.randint(10, max(10, radius))
    draw_circle(img, row, col, rad)

    # Noise
    img_noisy = img + noise * np.random.rand(*img.shape)

    return (row, col, rad), img_noisy, img


def find_circle(img):
    # Fill in this function
    detect = predictor.circle_find(img)
    return detect


def iou(params0, params1):
    row0, col0, rad0 = params0
    row1, col1, rad1 = params1

    shape0 = Point(row0, col0).buffer(rad0)
    shape1 = Point(row1, col1).buffer(rad1)

    return (
        shape0.intersection(shape1).area /
        shape0.union(shape1).area
    )


def main():
    for attempt in range(1):
        results = []
        for _ in tqdm(range(1000)):
            params,img_noisy, img = noisy_circle(200, 50, 2)
            detected = find_circle(img)
            results.append(iou(params, detected))
        results = np.array(results)
        # print((results > 0.7))
        print('Accuracy:', (results > 0.5).mean(), 'attempt ', attempt+1)
        
        # Plot the last generated image -- Although out scope but defined in memory
        fig, (ax,ax1,ax2) = plt.subplots(1,3, figsize=(10,5))
        y, x, r = params
        img_rec = cv2.rectangle(img_noisy.copy(), (x - r - 1, y - r - 1), (x + r + 1, y + r + 1), (0, 0, 0), 2)
        ax.imshow(img)
        ax.set_title("Original image")
        ax1.imshow(img_noisy.copy())
        ax1.set_title("Image with added noise")
        ax2.imshow(img_rec)
        ax2.set_title("Detected noisy circle")
        plt.show()
        # stacked_img = np.hstack([img, img_noisy, np.zeros([200, 1], dtype=np.uint8), img_rec])
        # plt.imshow(stacked_img)
        # plt.show()

if __name__ == '__main__':
    main()

GitHub - jacke121/Circle_detector: Detect complete and incomplete circular shapes in noisy images

霍夫圆检测

霍夫圆检测_jacke121的专栏-CSDN博客_霍夫圆检测

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

圆检测学习笔记 的相关文章

  • 如何使用python登录页面,该页面需要服务器在第一次请求时响应会话ID?

    我正在编写一个脚本来登录某个网页 我使用 request 和 request session 模块来实现此目的 在使用登录参数的第一个请求时 服务器响应一个会话 ID 如何设置该会话 ID 以进一步登录到同一页面 url some url
  • 在 Python 中同时插入行

    我正在尝试对我的代码进行矢量化 但遇到了障碍 我有 nxd x 值数组 x1 xn 其中每一行 x1 有很多点 x11 x1d nxd y 值数组 y1 y2 y3 其中每一行 y1 有很多点 y11 y1d x 值的 nx1 数组 x 1
  • 如何将人物传奇带到前台?

    我有一系列子图 其中每个子图都有一个图例 我想在每个子图之外与相邻子图重叠 问题在于图例位于其自己的图的 顶部 但位于相邻图的下方 Legend 不将 zorder 作为参数 所以我不知道如何解决这个问题 这是我使用过的代码 import
  • Json.dump 失败并显示“必须是 unicode,而不是 str”TypeError

    我有一个 json 文件 其中恰好有大量中文和日文 以及其他语言 字符 我将其加载到我的 python 2 7 脚本中使用io open如下 with io open multiIdName json encoding utf 8 as j
  • TCP打孔问题

    我尝试使用 Python 3 中概述的原则为防火墙编写一个基本的 TCP 打孔器本文 http www bford info pub net p2pnat index html 不过 我无法连接任何东西 这是代码 usr bin pytho
  • 将数字转换为整数列表[重复]

    这个问题在这里已经有答案了 我该如何写magic下面的函数 gt gt gt num 123 gt gt gt lst magic num gt gt gt gt gt gt print lst type lst 1 2 3
  • 使用pip安装pylibmc时出错

    您好 当我尝试使用 pip 在 OSX Lion 上安装 pylibmc 时 出现以下错误 pylibmcmodule h 42 10 fatal error libmemcached memcached h file not found
  • opencv不失真图像有一个奇怪的圆圈

    我尝试使用 opencv 针孔模型来计算校准参数 然后使图像不失真 问题是 未失真的图像中有一个奇怪的圆圈 如下所示 代码 原始图像和结果图像是here https github com wennycooper A004 pinhole 任
  • 如何使直方图列的宽度都相同

    我在操作直方图时遇到了一些麻烦 我有一个包含两列的 df 我将它们绘制为堆叠直方图 我将它们放入特定的垃圾箱中 请参阅下面的代码 但我想在最后制作一个大垃圾箱 4000 10000 但是 默认情况下 大垃圾箱的列宽很大 有没有办法让这个大垃
  • 模拟类:Mock() 还是 patch()?

    我在用mock http www voidspace org uk python mock index html使用Python 想知道这两种方法中哪一种更好 阅读 更Pythonic 方法一 只需创建一个模拟对象并使用它 代码如下 def
  • 如何打印和显示子进程 stdout 和 stderr 输出而不失真?

    也许有人可以帮助我解决这个问题 我在 SO 上看到了许多与此类似的问题 但没有一个问题同时处理标准输出和标准错误 也没有处理像我这样的情况 因此出现了这个新问题 我有一个 python 函数 它打开一个子进程 等待它完成 然后输出返回代码以
  • pandas-更改重采样时间序列的开始和结束日期

    我有一个时间序列 我将其重新采样到这个数据框中df 我的数据是从6月6日到6月28日 它希望将数据从6月1日延长到6月30日 计数列仅在较长时间内具有 0 值 而我的实际值是从 6 日到 28 日 Out 123 count Timesta
  • 如何连接多个字符串? [复制]

    这个问题在这里已经有答案了 如何将 stringList 中的所有字符串合并为一个而不打印它 例如 s joinStrings very hot day returns string print s Veryhotday 感觉有点倒退 但是
  • 枚举上的 random.choice

    我想用random choice on an Enum I tried class Foo Enum a 0 b 1 c 2 bar random choice Foo 但是这段代码失败了KeyError 我怎样才能随机选择一个成员Enum
  • Python 包安装:pip 与 yum,还是两者一起安装?

    我刚刚开始管理 Hadoop 集群 我们使用 Bright Cluster Manager 直至操作系统级别 CentOS 7 1 然后使用 Ambari 以及适用于 Hadoop 的 Hortonworks HDP 2 3 我不断收到安装
  • 在 Python 中伪造一个对象是否是类的实例

    假设我有一堂课FakePerson它模仿基类的所有属性和功能RealPerson 不扩展它 在Python 3中 是否可以伪造isinstance 为了认识到FakePerson as a RealPerson只通过修改对象FakePers
  • Python Pandas:向类 pandas.core.series.Series 添加方法

    我想在 Python 中处理时间序列 因此 Pandas 的 Series 类非常完美 并且有很多有用的方法 现在我想添加一些我需要但未实现的方法 例如 假设我有兴趣添加一个方法 该方法将两次一值附加到时间序列中 让我们调用该方法appen
  • 将同一 numpy 数组的两个视图组合成单个视图而不复制数组?

    我有一个大型 2d numpy 数组 我想删除它的子集并处理函数剩下的内容 我需要对许多子集执行此操作 因此理想情况下我不想每次都创建数组的副本 该函数不会更改数组中的任何值 mat np load filename mat 1 mat i
  • 真实值与预测值的降维可视化

    我有一个数据框 如下所示 label predicted F1 F2 F3 F40 major minor 2 1 4 major major 1 0 10 minor patch 4 3 23 major patch 2 1 11 min
  • 使用 TkInter 绑定设置不可交互(点击)覆盖

    我已经浏览了其他几篇关于类似问题的帖子 所有这些似乎都指向this https stackoverflow com questions 29458775 tkinter see through window not affected by

随机推荐

  • position absolute相关知识点

    前言 最近再看position相关知识点 发现有许多以前没有注意到的细节知识点 有不小的收获 本文就position absolute使用详细分析下 具体分析 position是CSS中比较重要的一个属性 常用于页面布局 它的值有4个 st
  • oracle数据库与postgre数据库之间的互相迁移

    oracle与postgre之间互相迁移之前要明白 postgreSQL中默认使用小写 oracleSQL中默认大写 迁移分成3个步骤 数据及结构迁移 迁移之后的类型及长度变化 不兼容的函数替换 1 数据及结构迁移 1 1数据大小写同步 o
  • JS 判断对象中是否包含某属性

    一 通过点或者方括号 我们在使用对象的时候 通过点或方括号可以获取对象的属性值 如果该对象自身不存在这个属性 就会返回undefined var obj name 小破船 doWhat 借箭 console log obj name 小破船
  • css linear-gradient 设置背景颜色渐变

    CSS3 渐变能够让背景颜色在两个或多个颜色之间平滑过渡 基本语法 background linear gradient direction color stop1 color stop2 direction 是指渐变的方向 color s
  • 迷宫问题寻宝(c++实现,求最短路径,显示路径)

    定义一个二维数组 int maze n m 它表示一个迷宫 其中的1表示道路不通 0表示可以走的路 3 表示宝藏 只能横着走或竖着走 不能斜着走 要求编程序找出找到宝藏的最短路路径 题目保证有解且只有一个最短路径 且只能从迷宫边缘进入迷宫
  • tomcat中仅启动指定的项目,不启动其它项目

    使用tomcat调试项目时 若部署过多项目会导致启动时间很长 这时指定自己想启动的项目就显得很有必要了 具体方法如下 一 打开tomcat中的server xml配置文件 在Host节点中添加或修改如下属性 deployXML false
  • QT系列第3节 QT中混合UI设计

    QT开发过程中 经常使用Qt designer设计器和代码方式结合来及进行ui设计 本节将介绍这两种方式混合进行ui开发 目录 1 工程添加图片资源 2 添加菜单 3 添加工具栏 4 简单文本编辑器实现 5 QT Creator常用快捷键
  • scrapy设置代理ip(精简版)

    在middlewares py文件中 添加下面的代码 import scrapy from scrapy import signals import random class ProxyMiddleware object def proce
  • 爬取淘宝价格

    爬取淘宝价格 from selenium import webdriver from lxml import etree from time import sleep 实例化一个浏览器对象 bro webdriver Chrome exec
  • [调用函数]

    注 梳理 整理 用来帮助自己学习 如有错误 请指出 1 编写一个函数 该函数接受两个整数作为参数并返回它们的和 在主函数中调用该函数并输出结果 示例输入 5 7 示例输出 12 解题思路 首先需要定义一个函数来实现两个整数的加法 函数的返回
  • 对于进程同步和异步的理解

    多进程并发执行具有异步的特性 进程异步就是指一个以上的进程在并发执行时具有的异步特型 就比如说两个进程之间指令的执行顺序是不确定的 具有很强的随机性 举个例子 现在有两个并发执行的进程 A 和 B 各自都有n条指令需要执行 然而 我的CPU
  • python后端学习(七)HTTP协议、实现WEB服务器

    HTTP协议简介 浏览器 gt 服务器发送的请求格式如下 GET HTTP 1 1 请求方式 路径 协议及版本 Host 127 0 0 1 8080 请求的地址 Connection keep alive 长连接 Accept text
  • RS485模块的介绍及引脚连线说明

    RS485模块通讯 1 RS 485简介 2 SP3485芯片及应用 1 RS 485简介 RS 485采用平衡发送和差分接收 因此具有抑制共模干扰的能力 以下是某宝上RS485模块的截图 应用特点 传输数据速度快 高达10Mbps 即10
  • 【老生谈算法】matlab实现粒子滤波及实现

    粒子滤波及matlab实现 1 文档下载 本算法已经整理成文档如下 有需要的朋友可以点击进行下载 说明 文档 点击下载 本算法文档 老生谈算法 matlab实现粒子滤波及实现 doc 更多matlab算法原理及源码详解可点击下方文字直达 5
  • 《Apache MINA 2.0 用户指南》第六章:传输

    最近准备将Apache MINA 2 0 用户指南英文文档翻译给大家 但是我偶然一次百度 发现 Defonds 这位大牛已经翻译大部分文档 原文链接 http mina apache org mina project userguide c
  • 从单向链表中删除指定值的节点-牛客网

    题目描述 输入一个单向链表和一个节点的值 从单向链表中删除等于该值的节点 删除后如果链表中无节点则返回空指针 链表结点定义如下 struct ListNode int m nKey ListNode m pNext 详细描述 本题为考察链表
  • 电脑知识【自用】

    1 解决BIOS误删Windows Boot Manager 方法一 通过Grub进行修复 通过以下步骤解决 重启电脑 按F12进入BIOS SETUP 进入Boot Sequence 查看Windows Boot Manager是否丢失
  • Sftp实现文件的上传下载(com.jcraft.jsch依赖解决解决:Could not parse response code.Server Reply: SSH-2.0-OpenSSH_5.3)

    依赖如下
  • 给vcenter中的Esxi主机网络添加VLAN

    1 使用vSphere Client连接到VMware ESXi Server 在 配置 网络 中 可以看到 当前有两个虚拟交换机 并且为该虚拟交换机分配了管理地址10 10 228 81 点击 添加网络 如图所示 2 添加配置向导 在网络
  • 圆检测学习笔记

    目录 边缘检测 再检测圆 霍夫圆检测 转自 深度OpenCV开发之精准找圆 GitHub zikai1 CircleDetection circle detection inscribed triangles image processin