如何使用 OpenCV 和 Python 检测管道裂缝?

信息处理 图像处理 计算机视觉 opencv
2022-02-02 23:57:08

我开发了一个机器人,可以在管道移动时捕捉管道内部的图像。要求是能够检测到内部的裂缝。到目前为止,我尝试了几个找到裂纹轮廓的 OpenCV 代码,但没有成功。

我正在处理的代码:

import cv2
import numpy as np
image = cv2.imread('pipe_photo1.jpg')
blurred = cv2.pyrMeanShiftFiltering(image,41,91)
gray = cv2.cvtColor(blurred,cv2.COLOR_BGR2GRAY)
ret, threshold = cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
_, contours, _ = cv2.findContours(threshold, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
print (len(contours))

cv2.drawContours(image,contours, -1,(0,0,255),6)
cv2.namedWindow("Display",cv2.WINDOW_NORMAL)
cv2.imshow("Display",image)
cv2.waitKey()

下面是我从相机获得的图像。我只想检测管道底部显示的裂缝并能够使用红线绘制它。您的帮助将真正帮助我在到期前实现我的目标。

在此处输入图像描述

1个回答

试试这个:

  1. 不要将图像转换为灰度,而是转换为 HSV
  2. 然后,通过改变 H、S 和 V 的范围,尝试掩盖裂缝(使用轨迹栏会很有帮助)

例如:

lower_value_blue = np.array([80,106,5])    # creating a range of HSV colours
higher_value_blue = np.array([150,255,150])
mask1 = cv2.inRange(blur1,lower_value_blue,higher_value_blue)

这一个面具蓝色,不使用轨迹栏

希望你能得到结果