homehwr 2024-02-20 20:59 采纳率: 0%
浏览 32

opencv-python寻找牛顿环的圆心和指定圆的半径

最近在使用opencv-python处理一个物理实验的结果——牛顿环图像的识别。我想实现的功能是识别出图像中圆环的圆心和每一个圆,在这个实验中需要任取两个圆(比如从圆心向外找到的第1个圆和第11个圆),分别计算出两个圆形的直径在图片上对应的像素数。牛顿环图片分放大像和缩小像,特别是缩小项不好处理。有些图片的对比度比较暗,也需要考虑。

牛顿环放大像图片是这样的:

img

缩小像的:

img

我是从这个寒假开始才自学了一点opencv库的内容,发现cv2.HoughCircles方法可以实现霍夫变换-圆检测,调整参数能识别图像中的圆形,但是对于识别圆环来说还是不准确的。我自己也尝试了很多方法,包括查相关资料、询问gpt4,但是识别的效果都不理想。我从网上也查找了一些资料,有的说可能要涉及到机器学习,我就完全没有了解了。

  • 写回答

3条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2024-02-20 22:06
    关注

    【以下回答由 GPT 生成】

    我了解您的问题,下面我将为您提供一个可能的解决方案。

    首先,我们可以使用cv2.HoughCircles方法来检测图像中的圆。但是,由于牛顿环的特殊性,可能需要进行一些预处理以提高检测的准确性。以下是一个可能的处理流程:

    1. 读取图像并将其转换为灰度图像。
    import cv2
    
    image = cv2.imread('newton_rings.jpg')
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    
    1. 对图像进行模糊处理,以减少噪音。
    blurred = cv2.GaussianBlur(gray, (5, 5), 0)
    
    1. 使用cv2.HoughCircles方法检测圆。
    circles = cv2.HoughCircles(blurred, cv2.HOUGH_GRADIENT, dp=1.2, minDist=50, param1=100, param2=30, minRadius=0, maxRadius=0)
    
    1. 遍历检测到的圆,计算每个圆的圆心和直径。
    if circles is not None:
        circles = np.round(circles[0, :]).astype("int")
        for (x, y, r) in circles:
            cv2.circle(image, (x, y), r, (0, 255, 0), 4)
            cv2.rectangle(image, (x - 5, y - 5), (x + 5, y + 5), (0, 128, 255), -1)
            cv2.putText(image, f"Diameter: {2*r}px", (x, y - 20), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)
    

    这些步骤是基本的处理流程,您可以根据实际情况进行调整和优化。希望这能帮助到您解决问题,如果您有任何疑问,请随时询问。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 修改了问题 2月20日
  • 创建了问题 2月20日