【问题标题】:Find the corners of a rectangle plate in a picture在图片中找到矩形板的角
【发布时间】:2021-02-12 23:13:44
【问题描述】:

我需要使用 Python 和 OpenCv 找到图片中矩形板的角的坐标。

原图是这样的:

现在我使用以下脚本进行边缘检测:

import cv2
import numpy as np
import matplotlib.pyplot as plt

image_original = cv2.imread('c:/python_test/camera_pics/Basler_acA640-300gm__22354308__20210211_135725420_36.tiff', cv2.IMREAD_COLOR)
image_gray = cv2.cvtColor(image_original, cv2.COLOR_BGR2GRAY)
filtered_image = cv2.Canny(image_gray, threshold1=20, threshold2=200)

cv2.imwrite('c:/python_test/test.bmp',filtered_image)

然后它看起来像这样:

现在我正试图找到盘子的角落,但我不知道该怎么做。这些角可以是内部矩形或外部矩形的角。我在 Paint 中编辑了下面的图片以显示我的意思。

你能帮我写一个脚本来找到这个盘子角落的坐标吗?

【问题讨论】:

  • 最后检测到的角的图像是您想要的图像?你是怎么画这些圆圈的?
  • 我想要的想要的图像不必看起来像这样,上面有图纸。我只想将角的坐标存储在变量中。我在 Paint 中制作了这张图片以显示我的意思。
  • 我认为可以通过计算所有边缘像素周围的凸包来找到上外角。如果物体很薄,同样适用于较低的外角。内角将更加难以提取。可以尝试 EDLines 或 LSD,无论它们是否为该任务提供更好的边缘结果。
  • 您可以以任何方式修改盘子吗?在拐角处粘贴标记或其他东西以便更容易检测到?

标签: python opencv image-processing corner-detection


【解决方案1】:

这是一件不容易的事,尤其是上脸的两个下角。对比度低(甚至在某些地方不存在)并且图像杂乱。

凸包确实会为您提供两个顶角(前提是始终可以检测到螺钉)。您还可以通过在凸包中找到重要的角度来找到下表面的底角。

知道板的厚度及其与真实高度相比的投影高度,您可以大致估计上表面拐角的位置。

由于长边检测得并不好,您可以考虑长的连续线段(在 8 连通性意义上),并尝试将它们与凸包和估计的角匹配。

【讨论】:

    猜你喜欢
    • 2013-12-15
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 2018-09-01
    • 2011-09-02
    • 1970-01-01
    相关资源
    最近更新 更多