IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> opencv-python 实现用霍夫圆变换找圆心坐标 -> 正文阅读

[Python知识库]opencv-python 实现用霍夫圆变换找圆心坐标

实验图片:

效果:

?代码:

# 加载环境包
import cv2
import numpy as np

# 图片简单处理
img = cv2.imread('00.jpg')  # 读取图片
GrayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 灰度化
GrayImage = cv2.medianBlur(GrayImage, 5)  # 中值模糊

"""
阈值处理,输入图片默认为单通道灰度图片 threshold()为固定阈值二值化
第二参数为阈值
第三参数为当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值(一般情况下,都是256色,所以默认最大为255)
thresh_binary是基于直方图的二值化操作类型,配合threshold一起使用。此外还有cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV
"""
ret, th1 = cv2.threshold(GrayImage, 127, 255, cv2.THRESH_BINARY)
"""
adaptiveThreshold()自适应阈值二值化,自适应阈值二值化函数根据图片一小块区域的值来计算对应区域的阈值,从而得到也许更为合适的图片。
第二参数为当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值(一般情况下,都是256色,所以默认最大为255)
第三参数为阈值计算方法,类型有cv2.ADAPTIVE_THRESH_MEAN_C,cv2.ADAPTIVE_THRESH_GAUSSIAN_C
第四参数是基于直方图的二值化操作类型,配合threshold一起使用。此外还有cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV
第五参数是图片中分块的大小
第六参数是阈值计算方法中的常数项
"""
th2 = cv2.adaptiveThreshold(GrayImage, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 3, 5)
th3 = cv2.adaptiveThreshold(GrayImage, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 3, 5)

kernel = np.ones((5, 5), np.uint8)  # 创建全一矩阵,数值类型设置为uint8
erosion = cv2.erode(th2, kernel, iterations=1)  # 腐蚀处理
dilation = cv2.dilate(erosion, kernel, iterations=1)  # 膨胀处理

imgray = cv2.Canny(erosion, 30, 100)  # Canny算子边缘检测
"""
第3参数默认为1
第4参数表示圆心与圆心之间的距离(太大的话,会很多圆被认为是一个圆)
第5参数默认为100
第6参数根据圆大小设置(圆越小设置越小,检测的圆越多,但检测大圆会有噪点)
第7圆最小半径
第8圆最大半径
"""
circles = cv2.HoughCircles(imgray, cv2.HOUGH_GRADIENT, 1, 80, param1=100, param2=20, minRadius=200,
                           maxRadius=230)  # 霍夫圆变换
"""
np.uint16数组转换为16位,0-65535
np.around返回四舍五入后的值
"""
circles = np.uint16(np.around(circles))

P = circles[0]  # 去掉circles数组一层外括号
for i in P:
    # 画出外圆
    cv2.circle(img, (i[0], i[1]), i[2], (0, 255, 0), 2)  # 第二参数()内是圆心坐标,第三参数是半径,第四参数()内是颜色,第五参数是线条粗细
    # 画出圆心
    cv2.circle(img, (i[0], i[1]), 2, (0, 0, 255), 3)
print("圆的个数是:")
print(len(P))
for i in P:
    r = int(i[2])
    x = int(i[0])
    y = int(i[1])
    print("圆心坐标为:", (x, y))
    print("圆的半径是:", r)

cv2.imshow('detected circles', img)  # 第一参数为窗口名称

cv2.waitKey(0)  # 无穷大等待时间
cv2.destroyAllWindows()

?

?

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-24 15:30:44  更:2021-08-24 15:31:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:50:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码