使用opencv获取图片上的圆形坐标,以图片为中心原点

本文介绍了如何使用OpenCV库中的HoughCircles函数检测图像中的圆形,并探讨了param2参数对检测效果的影响。作者提供了在Unity坐标系中应用HoughCircles的示例,以及关于调整minRadius和maxRadius的建议。
摘要由CSDN通过智能技术生成
import cv2 as cv
import numpy as np
import os


def detect_circular_image(image_path, out_path):
    # 读取文件
    origin = cv.imread(image_path, 1)
    img = cv.imread(image_path, 0)

    # 获取图片中心点
    (h, w) = img.shape[:2]
    center_x, center_y = w / 2, h / 2

    # 霍夫圆检测
    circles = cv.HoughCircles(img, cv.HOUGH_GRADIENT, 1, 100, param1=50, param2=80, minRadius=30, maxRadius=40)

    circles = np.uint16(np.around(circles))

    # 将检测到的圆圈标上去
    for i in circles[0, :]:  # 遍历矩阵每一行的数据
        cv.circle(origin, (i[0], i[1]), i[2], (0, 255, 0), 2)
        cv.circle(origin, (i[0], i[1]), 2, (0, 0, 255), 3)

        cv.putText(origin, "({},{})".format((i[0] - center_x) / 100,
                                            (-(i[1] - center_y) if (i[1] > center_y) else center_y - i[1]) / 100),
                   (i[0] - 10, i[1] - 10), cv.FONT_HERSHEY_SIMPLEX, 0.5, (242,74,65), 2)

    # 显示图像
    cv.imwrite(out_path, origin)
    cv.waitKey(0)
    cv.destroyAllWindows()

if __name__ == '__main__':
    for root, dirs, files in os.walk("F:\\images\\ningluosi"):
        for file in files:
            if file.endswith('.jpg') or file.endswith('.png'):  # 根据需要调整文件扩展名过滤条件
                image_path = os.path.join(root, file)
                detect_circular_image(image_path,"F:\\images\\ningluosi\\ceshi\\"+file)  # 检测圆形图片的坐标

cv.HoughCircles 中的 param2值越大,检测到的文件可能丢失,值小的时候,可能会获取到其他图形
minRadius:圆的最小半径
maxRadius: 最大半径
在这里插入图片描述
我上述坐标中获取的是unity中的坐标,直接粗暴的/100,实际中可以不除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值