检测图像的最边缘并根据其绘制

发布于 2021-01-29 17:01:57

我正在进行一个可以通过图像计算肘关节角度的项目。我正在努力的部分是图像处理。

目前,这是在Python中使用Intel RealSense R200进行的(尽管可以认为我正在使用图像输入)。

知道两个管子的侧面成一定角度会平行(两个橙色侧面和两个绿色侧面平行于相同的颜色)…

…我正在尝试构建与两对颜色等距的2个点的基因座,然后“外推到中间”以计算角度:

我已经到达第二张图片,并且不可靠地到达了第三张图片。我非常乐意提出建议,非常感谢您的协助。

关注者
0
被浏览
40
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我将使用以下方法尝试查找问题中提供的四行。

    1.读取图像,并将其转换为灰度

    import cv2
    import numpy as np
    rgb_img = cv2.imread('pipe.jpg')
    height, width = gray_img.shape
    gray_img = cv2.cvtColor(rgb_img, cv2.COLOR_BGR2GRAY)
    

    2.在图像顶部添加一些白色填充(只是为了增加一些背景)

    white_padding = np.zeros((50, width, 3))
    white_padding[:, :] = [255, 255, 255]
    rgb_img = np.row_stack((white_padding, rgb_img))
    

    结果图像-3
    白色填充图像
    .反转灰度图像,并在顶部应用黑色填充

    gray_img = 255 - gray_img
    gray_img[gray_img > 100] = 255
    gray_img[gray_img <= 100] = 0
    black_padding = np.zeros((50, width))
    gray_img = np.row_stack((black_padding, gray_img))
    

    黑色填充图像

    4.使用形态学闭合来填充图像中的孔-

    kernel = np.ones((30, 30), np.uint8)
    closing = cv2.morphologyEx(gray_img, cv2.MORPH_CLOSE, kernel)
    

    封闭图像
    5.使用Canny边缘检测找到图像中的边缘-

    edges = cv2.Canny(closing, 100, 200)
    

    管道边缘图像
    6.现在,我们可以使用openCV的HoughLinesP功能在给定图像中查找线-

    minLineLength = 500
    maxLineGap = 10
    lines = cv2.HoughLinesP(edges, 1, np.pi / 180, 50, None, 50, 100)
    all_lines = lines[0]
    for x1,y1,x2,y2 in lines[0]:
        cv2.line(rgb_img,(x1,y1),(x2,y2),(0,0,255),2)
    

    在此处输入图片说明
    7.现在,我们必须找到最右边的两条水平线和最下面的两条垂直线。对于水平线,我们将同时使用(x2,x1)对线进行降序排列。此排序列表中的第一行将是最右边的垂直线。跳过这一点,如果我们接下两条线,它们将是最右边的水平线。

    all_lines_x_sorted = sorted(all_lines, key=lambda k: (-k[2], -k[0]))
    for x1,y1,x2,y2 in all_lines_x_sorted[1:3]:
        cv2.line(rgb_img,(x1,y1),(x2,y2),(0,0,255),2)
    

    水平线图像
    8.同样,可以使用y1坐标以降序对行进行排序,并且排序列表中的前两行将是最底部的垂直线。

    all_lines_y_sorted = sorted(all_lines, key=lambda k: (-k[1]))
    for x1,y1,x2,y2 in all_lines_y_sorted[:2]:
        cv2.line(rgb_img,(x1,y1),(x2,y2),(0,0,255),2)
    

    垂直线图像
    9.两行图像-

    final_lines = all_lines_x_sorted[1:3] + all_lines_y_sorted[:2]
    

    最后几行

    因此,获得这4行可以帮助您完成其余任务。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看