从图片中完整切除圆形物体 opencv+python

2023-11-16

面临一个任务就是要图片中的圆形物体切出来,然后做异常点检测(就是看那些圆形物体是异常点),因为异常点检测的方法还在摸索,现在就先把从图片中把圆形物体完整切出的方法写出来。

1.首先图片是这样的(圆形物体非常多)
这里写图片描述

2.接下来就是代码部分:

import os
import cv2
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

img_path = 'D:\\\\ProgramData\\\\007.png'
img = cv2.imread(img_path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# cv2.imshow('original_img', img)
# cv2.imshow('gray', gray)
# cv2.waitKey()

#对模糊图像二值化。梯度图像中不大于90的任何像素都设置为0(黑色)。 否则,像素设置为255(白色)
(_, thresh) = cv2.threshold(gray, 53, 255, cv2.THRESH_BINARY_INV)
# cv2.imshow('thresh', thresh)

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
closed = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel,None,(-1,-1),1)
# cv2.imshow('closed', closed)
# cv2.waitKey(0)#无限期等待输入

(_, cnts, _) = cv2.findContours(closed,cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
# draw a bounding box arounded the detected barcode and display the image
img_copy = img.copy()
cv2.drawContours(img_copy, cnts, -1, (0, 255, 0), 1)

以上的工作主要就是打开图片,对图片进行灰度处理,阈值处理,查找边缘,最后画出边缘,经过这一步处理后,大致图片大致是这样的
这里写图片描述

效果一般,具体图片效果要根据调节阈值化参数来达到

centers = []
for i in range(0,len(cnts)): 
    (rx,ry),radius = cv2.minEnclosingCircle(cnts[i]) ##找出这些曲线点坐标的最小封闭圆的圆心和半径
    center = (int(rx),int(ry))
    centers.append(center)
    radius = int(radius)
    cv2.circle(img,center,28,(255,0,0),2)

这一步是根据上面代码中获取到圆形物体的边缘坐标,用圆形曲线去做拟合,得出每个圆的半径和圆心坐标。经过这一步处理之后,效果大概是这样:
这里写图片描述

最后根据这些圆心坐标和半径把图片中的圆形物体切出来

r = 28
for i in range(0,len(centers)):    
#     img_test = cv2.circle(img,centers[i],28,(255,0,0),2)
    x = centers[i][0]
    y = centers[i][1]
    rectX = (x - r) 
    rectY = (y - r)
    if(rectX < 0):
        rectX = 0    
    crop_img = img[rectY:(y+r),rectX:(x+r)]  #Y在前,X在后,用矩阵来裁剪圆形区域
    cv2.imwrite('D:\\\\ProgramData\\\\cut\\\\'+str(x)+'_'+str(y)+'.png',crop_img)  

切出来的效果还不错,大概就是这样吧
这里写图片描述


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

从图片中完整切除圆形物体 opencv+python 的相关文章

  • vue项目中封装手动上传单个图片并支持修改和移除

    现有的组件库无法满足手动上传文件到服务器 并支持通过按钮修改和移除文件的操作 所以我利用原生input进行封装 如有需要请拿走 1 页面部分 div class upload picture div class uploadItem div
  • 通信原理及系统系列38——图解过采样和欠采样

  • 【华为OD机试真题 JS】关联子串

    标题 关联子串 时间限制 1秒 内存限制 262144K 语言限制 不限 给定两个字符串str1和str2 如果字符串str1中的字符 经过排列组合后的字符串中 只要有一个字符串是str2的子串 则认为str1是str2的关联子串 若str
  • uni-app左右平分九宫格样式

    效果图 1 template 布局
  • 对区块链技术的一些思考

    作者 朱金灿 来源 clever101的专栏 为什么大多数人学不会人工智能编程 gt gt gt 缘起 本想把标题起为有些扯淡的区块链 但想想咱们还是别标题党了 实在一些吧 前段时间有个朋友向我介绍区块链技术 提到区块链技术如何牛逼 说到
  • OSI七层模型与TCP/IP五层模型

    一 OSI参考模型 1 OSI的来源 OSI Open System Interconnect 即开放式系统互联 一般都叫OSI参考模型 是ISO 国际标准化组织 组织在1985年研究的网络互连模型 ISO为了更好的使网络应用更为普及 推出
  • python—test2021.11.2

    1 filter 函数的语法格式如下 newIter filter function iterable 正因为该函数是根据自定义的过滤函数进行过滤操作 所以支持更加灵活的过滤规格 其中 各个参数的含义如下 function 可传递一个用于判
  • Android P PowerManagerService分析(一)

    1 概述 PowerManagerService是负责管理 协调设备电源管理的系统服务之一 设备常见功能如亮灭屏 亮度调节 低电量模式 保持CPU唤醒等 都会通过PMS的协调和处理 其继承自SystemService 因此具有SystemS
  • 创建线程的三种方式,常用线程池介绍

    进程和线程 线程是在一个进程中 并发执行的多个程序逻辑 线程是进程执行的单位 一个进程中至少有一个线程 而这个线程被称为主线程 主线程是一个程序的入口 main 就是由主线程来执行的 线程创建三种方式 1 继承Thread类 2 实现Rnn
  • 深度前馈网络(DNN):理解、应用和Python示例

    目录 1 引言 2 什么是深度前馈网络 3 深度前馈网络的原理 3 1 神经元和激活函数 3 2 前馈传播 3 3 反向传播和参数更新 4 深度前馈网络的应用 4 1 图像分类 4 1 1 数据预处理 4 1 2 模型选择与训练 4 1 3
  • /etc/目录下的passwd文件内容详解

    etc passwd中一行记录对应着一个用户 每行记录又被冒号 分隔为7个字段 其格式和具体含义如下 用户名 口令 用户标识号 组标识号 注释性描述 主目录 登录Shell 1 用户名 是代表用户账号的字符串 通常长度不超过8个字符 并且由
  • 《数据库系统内 幕》存储引擎

    数据库系统内幕 存储引擎 负责内存和磁盘上存储 检索和管理数据 章一 TPC C基准 acid属性 设计存储引擎 章二 b树的平衡 基于磁盘存储的树 不太了解 分页二叉树 总结 章三 文件格式 章四 页头 搜索 分裂合并 平衡 压缩 清扫维
  • html输入框文字颜色_HTML5颜色输入

    html输入框文字颜色 Currently supported in all modern browsers with the exception of Safari and Internet Explorer the potential
  • 使用正则匹配标签

    在我写上一个试题管理项目时 有一个需求是需要匹配HTML文档节点的 因为有些试题是有图片的 所以需要把图片给匹配出来 他储存在数据库的形式如下 img src xxx xx x x png xxxxxxxxxxxxxxxxxxxxxxxxx
  • An exception occurred processing JSP page

    今天在整个Mybatis SSM 练习时 运行程序一直报一下错误 说是 An exception occurred processing JSP page处理JSP页面时发生异常 Type Exception Report Message
  • JMS 学习 一

    JMS 作为一个ActiveMQ的实现 在JAVA开发中经常使用 一 环境准备 从最新的网站上获取最新版本 下载地址为 http activemq apache org download html 可以看到有2个版本 一个windows版本
  • MySQL为什么使用B+树作为索引? 索引原理?

    目录 一 Mysql索引主要有两种结构 B Tree索引和Hash索引 什么是索引 为什么要使用索引 举例说明使用索引的好处 数据库中使用什么数据结构作为索引 各种树的名字 平衡二叉树 为什么平衡二叉树也不适合作为索引 B Tree适合作为
  • linux内核安装编译

    Linux内核下载及编译 下载Linux内核 可以从官网下载linux内核 也可以通过第三方网站进行下载 官网网址 https www kernel org 由于官网可能存在被墙的原因 所以下在很慢 这里也提供一个更加便捷的下载地址 htt
  • 爬虫小练手

    目录 一 简介 了解爬虫 二 网络协议 2 1 http协议 2 2 https协议 三 入门案例 3 1 爬取搜狗首页的页面数据 3 2 爬取搜狗指定词条对应的搜索结果页面 简易网页采集器 3 3 破解百度翻译 获取想要的翻译结果 3 4
  • Windows10家庭版添加组策略编辑器

    1 新建批处理文件test bat 内容如下 echo off pushd dp0 dir b SystemRoot servicing Packages Microsoft Windows GroupPolicy ClientExtens

随机推荐

  • Unity实战(1):Unity点击按钮,打印按钮文字内容

    目录 前言 一 准备工作 1 在场景中新建一个按钮 这里使用的是Button TextMeshPro 如果没有需要更新UNITY版本 2 将Button的文字内容在这里改为123456以便测试 新建好以后默认的内容是Button 3 新建一
  • c++学习

    7 指针 7 1 指针的基本概念 作用 可以通过指针间接访问内存 指针是用来记录内存地址编号的 指针就是一个地址 1 定义指针 语法 数据类型 指针变量名 int a 10 int p p a 或者int p a cout lt lt a的
  • PTA 基础编程题目集 7-27 冒泡法排序 C语言

    PTA 基础编程题目集 7 27 冒泡法排序 C语言 将N个整数按从小到大排序的冒泡排序法是这样工作的 从头到尾比较相邻两个元素 如果前面的元素大于其紧随的后面元素 则交换它们 通过一遍扫描 则最后一个元素必定是最大的元素 然后用同样的方法
  • Nacos配置文件 Param ‘serviceName‘ is illegal, serviceName is blank

    今天学习NACOS配置文件时 报错Param serviceName is illegal serviceName is blank 但是我在bootstrap yml文件中配置了服务名 父工程引入的依赖版本为最新的2021 1
  • AndroidStudio将module变为library

    文章注明出处可随意转载 请尊重别人的劳动成果 前言 在一个application当中 可能会存在多个module 有时也会有一个module包含其他module的需求 在完成这个需求时 Google了很多 全是2014年之前的一些老文章 现
  • Gateway配合sentinel自定义限流_Spring Cloud Gateway 扩展支持动态限流

    之前分享过 一篇 限流实现 核心是依赖Spring Cloud Gateway 默认提供的限流过滤器来实现 原生RequestRateLimiter 的不足 配置方式 RequestRateLimiterGatewayFilterFacto
  • react+ts+vite从0搭建项目

    一 创建项目 1 创建一个基础项目 npm create vite latest 项目名 template react ts eg 输入命令后需要回答几个问题 按照自己需求选择即可 此处选择react ts 2 格式化代码的配置 a vsc
  • 京东、阿里、小米IoT平台设备接入对比分析

    概述 京东 阿里 小米都在积极布局物联网 智能家居方向 经过几年的运营和积累 各家平台接入了不同产品 形成了各自的发展模式 本报告从平台设备的视角 通过分析各平台设备接入情况 对比已接入的设备品类 摸清平台的布局 分析各平台优劣势 为物联网
  • 车载以太网工具链

    一 什么是车载以太网 随着近年汽车电子的快速发展 车内ECU数量的持续增加 带宽需求也随之不断增长 对此 汽车制造商的电子系统 线束系统等成本也在提高 而相比于传统总线技术 车载以太网不仅可以满足汽车制造商对带宽的需求 同时还能降低车内的网
  • 2.树莓派上程序自启动方式总结(带桌面)

    在树莓派上设置程序上电自动启动的几种方法 1 在pi config中新建autostart文件夹 在下面新建 desktop后缀的文件 具体方式问度娘 忘了 2 在pi文件夹下 修改 bashrc和 profile文件 比如直接运行py文件
  • 图像基本变换---图像二值化(包含OSTU/迭代法/统计法/双峰法/P分位法/最大熵法)

    OSTU法图像二值化 算法说明 Ostu法又叫做最大类间方差法 是一种常用的图像分割算法 基本算法思想是根据初始阈值把图像分为两类 然后计算两类之间的方差 更新阈值 重新计算类间方差 当满足类间方差最大时的阈值 即为所求最佳阈值 具体过程如
  • mybatis中关于example类详解mybatis的Example[Criteria]的使用

    一 什么是example类 mybatis generator会为每个字段产生如上的Criterion 如果表的字段比较多 产生的Example类会十分庞大 理论上通过example类可以构造你想到的任何筛选条件 在mybatis gene
  • 基于Pygame框架的交通导流可视化模拟

    目录标题 项目介绍 项目要求 关键技术 项目核心功能 代码 参考资料 源码下载地址 https download csdn net download david2000999 85627883 项目介绍 本项目根据以下项目要求完成的一个py
  • 软件测试大总结

    目录 一 基本内容 二 软件开发的五大模型 1 瀑布模型 2 螺旋模型 3 增量模型 4 迭代模型 5 敏捷模型 三 敏捷模型中的模型 1 V模型 2 W模型 四 测试用例的设计方法 五 测试分类 1 按测试对象划分 2 按照是否可以查看代
  • 【MySQL索引】提高查询速度和效率

    1 认识索引 假设现在大家要去 MySQL 书中找索引的内容 大家应该不会拿着 MySQL 的书一张一张去找 而是会看MySQL 书的目录 然后通过目录找到索引对应的页码 再去对应的页码中查看索引的内容 索引的优点 索引就相当于书的目录 运
  • 命令行操作MySQL - 调整列的完整性约束

    这是命令行操作MySQL数据库系列博客的第十一篇 今天这篇博客记录如何 调整列的完整性约束 调整 主键 外键 非空 唯一 自增长和默认值约束 一 主键PK 外键FK和 唯一键UK 查询键的别名 show index 或 keys from
  • 关系型数据库连接表的几种方式

    一 SQL 左外连接 右外连接 全连接 内连接 内连接 a表 id name 1 张3 2 李四 3 王武 b表 id job parent id 1 23 1 2 34 2 3 34 4 a id同parent id 存在关系 内连接 i
  • 设置最小值_allegro软件的绝对传输延迟是什么,绝对传输延迟应该怎么设置呢...

    标题 allegro软件的绝对传输延迟是什么 绝对传输延迟应该怎么设置呢 我们在用allegro进行PCB设计完成以后 都需要对一组传输的总线进行时序等长 在做时序等长的时候 分为绝对传输延迟与相对传输延迟 绝对传输延迟 顾名思义 信号传输
  • 洛谷 P1026 [NOIP2001 提高组] 统计单词个数

    题目描述 给出一个长度不超过 200 的由小写英文字母组成的字母串 该字串以每行 20 个字母的方式输入 且保证每行一定为 20 个 要求将此字母串分成 k 份 且每份中包含的单词个数加起来总数最大 每份中包含的单词可以部分重叠 当选用一个
  • 从图片中完整切除圆形物体 opencv+python

    面临一个任务就是要图片中的圆形物体切出来 然后做异常点检测 就是看那些圆形物体是异常点 因为异常点检测的方法还在摸索 现在就先把从图片中把圆形物体完整切出的方法写出来 1 首先图片是这样的 圆形物体非常多 2 接下来就是代码部分 impor