python 找图像中的圆
一,动态自适应
'''
此方法是一种动态自适应找圆方法
使用方法:
im_floodfill = get_adaptive_circle(crop_img)
输入原图crop_img
返回mask'''import os
import cv2
import numpy as np# 求最大连通域的中心点坐标
# def centroid(max_contour):
# moment = cv2.moments(max_contour)
# if moment['m00'] != 0:
# cx = int(moment['m10'] / moment['m00'])
# cy = int(moment['m01'] / moment['m00'])
# return cx, cy
# else:
# return Nonedef fillHole(im_in):im_floodfill = im_in.copy()im_floodfill = np.uint8(im_floodfill)row, col, dim = im_floodfill.shape# Mask used to flood filling# Notice the size needs to be 2 pixels than the imagemask = np.zeros((row+2, col+2), np.uint8)# Floodfill from point int(row/2), int(col/2)cv2.floodFill(im_floodfill, mask, (int(row/2), int(col/2)), (255, 255,255))# cv2.morphologyEx(im_floodfill, cv2.MORPH_ELLIPSE, mask)return im_floodfilldef get_adaptive_circle(crop_img):ori_row, ori_col, ori_dim = crop_img.shapeimg = cv2.resize(crop_img, (240, 270))row, col, dim = img.shapegray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 灰度图像edges = cv2.Canny(gray, 100, 200)kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (15, 15)) # 圆形kernelclosing = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel, 100)# 提取边缘contours, hierarchy = cv2.findContours(closing, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)# 找到最大的contourarea = []for j in range(len(contours)):area.append(cv2.contourArea(contours[j]))max_idx = np.argmax(area)# 求椭圆ellipse = cv2.fitEllipse(contours[max_idx]) # [ (x, y) , (a, b), angle ]ellipse_img = np.zeros((row, col, dim))cv2.ellipse(ellipse_img, ellipse, (255, 255, 255), 2)# 填充椭圆ellipse_fill = fillHole(ellipse_img)ellipse_fill = cv2.resize(ellipse_fill, (ori_row, ori_col))ret, ellipse_fill = cv2.threshold(ellipse_fill[:, :, 0], 0, 255, cv2.THRESH_BINARY | cv2.THRESH_TRIANGLE)# cv2.imshow('Canny', edges)# cv2.imshow('closing', closing)# cv2.imshow('ellipse_img', ellipse_img)# cv2.imshow('ellipse_fill', ellipse_fill)## cv2.waitKey(0)return ellipse_fillif __name__ == '__main__':img = cv2.imread("/home/1.png")crop_img = img[650:1400, 1000:1750]ellipse = get_adaptive_circle(crop_img)# save_img_path = os.path.join(save_path, imgs_list[i])# cv2.imwrite(save_img_path, ellipse)
cv2.Canny(img, threshold1, threshold2)
https://www.cnblogs.com/aoru45/p/9763988.html
其中,较大的阈值2用于检测图像中明显的边缘,但一般情况下检测的效果不会那么完美,边缘检测出来是断断续续的。所以这时候用较小的第一个阈值用于将这些间断的边缘连接起来。
函数返回的是二值图,包含检测出的边缘
二,固定位置画圆
'''
此方法是一种简单的在固定位置上画圆的方法, 动态自适应画圆请参考:get_adaptive_circle.py
使用方法:
im_floodfill = get_circle(crop_img)
输入原图crop_img
返回mask默认圆心坐标:
center_row, center_col = int(row // 2), int(col // 2)
默认半径:
radius = int(row // 2 - 10)
'''import cv2
import numpy as npdef fillHole(im_in):im_floodfill = im_in.copy()im_floodfill = np.uint8(im_floodfill)row, col, dim = im_floodfill.shape# Mask used to flood filling# Notice the size needs to be 2 pixels than the imagemask = np.zeros((row+2, col+2), np.uint8)# Floodfill from point int(row/2), int(col/2)cv2.floodFill(im_floodfill, mask, (int(row/2), int(col/2)), (255, 255,255))# cv2.morphologyEx(im_floodfill, cv2.MORPH_ELLIPSE, mask)return im_floodfilldef get_circle(crop_img):row, col, dim = crop_img.shapecenter_row, center_col = int(row // 2), int(col // 2)radius = int(row // 2 - 10)ellipse = np.zeros((row, col, dim))cv2.circle(ellipse, (center_row, center_col), radius, (255, 255, 255), 2)im_floodfill = fillHole(ellipse)cv2.imshow("ellipse", ellipse)cv2.imshow("crop_img", crop_img)cv2.imshow("im_floodfill", im_floodfill)cv2.waitKey(0)return im_floodfillif __name__ == '__main__':img = cv2.imread("/home/pi/1.png")crop_img = img[650:1400, 1000:1750]im_floodfill = get_circle(crop_img)# save_img_path = os.path.join(save_path, imgs_list[i])# cv2.imwrite(save_img_path, im_floodfill)
python 找图像中的圆相关推荐
- 使用Python,OpenCV和Hough圆检测图像中的圆
使用Python,OpenCV和Hough圆检测图像中的圆 1. 效果图 2. cv2.HoughCircles(image, method, dp, minDist) 3. 源码 参考 前几篇博客中 ...
- 使用OpenCV和Python从图像中提取形状
Welcome to the first post in this series of blogs on extracting features from images using OpenCV an ...
- 编程实战(4)——python识别图像中的坐标点并保存坐标数据
编程实战(4)--python识别图像中的坐标点并保存坐标数据 文章目录 编程实战(4)--python识别图像中的坐标点并保存坐标数据 综述 代码思路 库的安装 图片预处理 图像细化 图像二极化 提 ...
- python识别图像中绿色的部分_[OpenCV-Python] OpenCV 中的图像处理 部分 IV (四)
部分 IV OpenCV 中的图像处理 21 OpenCV 中的轮廓 21.1 初识轮廓 目标 • 理解什么是轮廓 • 学习找轮廓,绘制轮廓等 • 函数:cv2.findContours(),cv2. ...
- 如何使用 Python 隐藏图像中的数据
作者 | 小白 来源 | 小白学视觉 隐写术是在任何文件中隐藏秘密数据的艺术. 秘密数据可以是任何格式的数据,如文本甚至文件.简而言之,隐写术的主要目的是隐藏任何文件(通常是图像.音频或视频)中的预期 ...
- 基于Python查找图像中最常见的颜色
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 如果我们能够得知道一幅图像中最多的颜色是什么的话,可以帮助我们解决 ...
- python图像检测_如何用Python检测图像中的矩形项
我发现了很多关于使用openCV等人在图像中找到"东西"的问题.在 Python中,但到目前为止,我一直无法将它们拼凑在一起,以便为我的问题提供可靠的解决方案. 我正在尝试使用计算 ...
- python识别图像中的物体_OpenCV+Python 指定物体识别
本文介绍一种基于HoG+Pyramids+Sliding Windows+SVM的物体识别方法 基本流程 (1)确定最小检测物体,对原图img缩放,缩放比例为(滑动窗大小/最小物体大小). (2)缩放 ...
- python提取图片中的表格,Python从图像中的表中提取值
我要从PDF表格中提取值,然后将数据保存在json文件中, 我使用pytesseract从将pdf转换为的图像中获取文本, 现在的问题是,它给了我一个包含所有数据的大字符串. 我尝试通过SP进行拆分, ...
最新文章
- 链表的建立,搜索,插入,反转,销毁以及合并有序链表。
- 外部引用CSS中 link与@import的区别
- 富贵不压重发_为什么老人常说“贵人不顶重发”,“重发”是什么意思? ?...
- 运维祈求不宕机_[国庆特辑] 程序员应该求谁保佑才能保证不宕机?
- Flink 最佳学习实践 | 从 0 到 1 学会 Apache Flink
- Oracle常用诊断事件清单
- Elasticsearch 最佳实践!
- 让线程等待10秒_Java多线程-线程状态
- 《网络对抗》 逆向及Bof基础实践
- g40-45支持虚拟化技术_虚拟化技术与原理简介
- python汉化包放哪_python 汉化
- ContentRoot 和 WebRoot 的区别
- PowerDesigner工具栏消失恢复
- 写会议纪要也是需要水平滴
- SpringCloud 基础架构搭建
- VS2017-C++-使用CSpreadSheet写EXCEL
- 高级查询组件dynamicCondition升级为v2.0.0版本(一)——使用步骤
- 分布式(技术栈、关键技术、PaaS平台、资料推荐、相关论文)
- python 获取当前运行的DCC工具
- Tomat组件研究之ThreadPool
热门文章
- Python—tkinter实现勾选框以及全选和反选
- adobe动画_Adobe替代品:动画软件
- mysql 遍历XML_mybatis 中,mapper.xml中遍历list集合知识点
- html 图片自动大小,css图片自适应_用css让图片自动适应大小
- 遍历各盘符,搜索是否安装某软件exe(某文件是否存在)
- openlayers3实现动态图标gif其他css支持的格式
- 注意力机制之注意力分数
- 成功管理计划(Managing Successful Programmes, MSP)
- RK3568-商显广告机、POS机主板方案
- 关于51单片机keil编程时头文件的引用