【问题标题】:Extracting a rectangle shaped object from an image从图像中提取矩形对象
【发布时间】:2020-11-27 02:52:43
【问题描述】:

Testing image of voltmeter

所以我对这个地区还很陌生,并且一直在涉足图像。由于缺乏更好的词,我得到了一些不稳定的结果。我实际上是在尝试检测上图中变化的电压表并提取白色区域或尽可能接近白色区域。

问题是,它适用于图像的某些变体,但不适用于其他图像。所以,我的问题是:

  • 是否有某种快速有效的方法来检测和提取所需区域? (快速有点次要)
  • 对于在该领域有实际经验和专业知识的你们中的一些人来说,这样的任务背后的思考过程是什么?

我试过了:

  • 检查各种颜色空间和这些颜色空间中的特定平面,以便于提取信息
  • 直方图均衡、阈值、模糊、边缘检测
  • 轮廓和介于两者之间的一些奇怪的东西。

在上述图像的变体中,我有点坚持实现一种“稳健”或某种“通用”的方法来检测所述区域。

感谢您的任何反馈。

【问题讨论】:

    标签: python image-processing


    【解决方案1】:

    代码如下:

    import cv2
    from matplotlib import pyplot as plt
    im = cv2.imread("volt.jpg")
    
    imgray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
    ret, thresh = cv2.threshold(imgray, 150, 200, 0)
    #imedge = cv2.Canny(imgray, 30, 200) 
    
    
    contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 
    
    plt.imshow(thresh)
    
    voltcnt = 0
    x = 0
    for i in range(0, len(contours)):
        if cv2.contourArea(contours[i]) > 50000 and cv2.contourArea(contours[i]) < 100000:
            voltcnt = cv2.contourArea(contours[i])
            x = i
            
    cv2.drawContours(im, contours[x], -1, (255, 0, 0), 3) 
    plt.imshow(im)
    

    这是输出:

    你也可以试试“cv2.SimpleBlobDetector()”

    【讨论】:

    • 对于大多数通用方法,您必须使用基于深度学习的检测和分割。
    • 哦,哇,我猜我用错了轮廓。感谢您的反馈,将尝试使用您推荐的内容并查看结果。
    猜你喜欢
    • 2014-12-22
    • 1970-01-01
    • 2020-06-25
    • 2020-02-21
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多