python图像边缘检测报告_python – 检测图像的最外边缘并基于它进行绘图

我会使用以下方法尝试找到问题中提供的四行.

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))

结果图片 – Xxc1T.jpg

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))

PX6Mi.jpg

4.使用形态学关闭填补图像中的漏洞 –

kernel = np.ones((30, 30), np.uint8)

closing = cv2.morphologyEx(gray_img, cv2.MORPH_CLOSE, kernel)

wZqLX.jpg

5.使用Canny边缘检测在图像中查找边缘 –

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

GF0h7.jpg

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)

95wkc.jpg

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)

lVVli.jpg

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)

hFF5C.jpg

9.两行图像 –

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

jlHsj.jpg

因此,获得这4行可以帮助您完成剩余的任务.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值