Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用OpenCV Python顺利检测焊接接头?_Python_Opencv_Image Processing_Scikit Learn - Fatal编程技术网

如何使用OpenCV Python顺利检测焊接接头?

如何使用OpenCV Python顺利检测焊接接头?,python,opencv,image-processing,scikit-learn,Python,Opencv,Image Processing,Scikit Learn,我已尝试使用本问题最后一部分中随附的代码检测焊接接头(焊道)。我的目标是在关节上画一个轮廓,如第三张图所示,但我的结果很差,看起来与预期的结果不相似。以下是我所做工作的总结,但代码非常清楚: 1.读取图像.jpg格式 2.图像模糊 3.阈值 4.形态学运算 5.创建掩码 6.寻找等高线 但结果并不乐观,我怎么能从这里脱身呢 img_new = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) blur_image = cv2.bilateralFilter(img_new

我已尝试使用本问题最后一部分中随附的代码检测焊接接头(焊道)。我的目标是在关节上画一个轮廓,如第三张图所示,但我的结果很差,看起来与预期的结果不相似。以下是我所做工作的总结,但代码非常清楚: 1.读取图像
.jpg
格式 2.图像模糊 3.阈值 4.形态学运算 5.创建掩码 6.寻找等高线

但结果并不乐观,我怎么能从这里脱身呢

img_new = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
blur_image = cv2.bilateralFilter(img_new,5,21,21)
thresh = cv2.adaptiveThreshold(blur_image,255,
                               cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
                               cv2.THRESH_BINARY_INV,15,3)
kernel = np.ones((5,5),dtype='uint8')
thresh_dilated = cv2.dilate(thresh, kernel, iterations = 1)
num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(thresh_dilated, connectivity=4)
sizes = stats[1:,-1]
min_size = 5000
num_labels = num_labels -1
img2 = np.zeros((labels.shape))
for i in range(0,num_labels):
    if sizes[i]>=min_size:
        img2[labels==i+1]=255
closing = cv2.morphologyEx(img2,cv2.MORPH_CLOSE,kernel)
opening = cv2.morphologyEx(closing,cv2.MORPH_OPEN,kernel)
result = opening.copy()
new_result = result.astype(dtype=np.uint8)

black = np.full((new_result.shape[0],new_result.shape[1],3),(0,0,0),np.uint8)
black1 = cv2.ellipse(black,(700,750),(300,140),0,0,360,(255,255,255),-1)
grayscale = cv2.cvtColor(black1,cv2.COLOR_BGR2GRAY)
ret,b_mask = cv2.threshold(grayscale,127,255,0)
img_result = cv2.bitwise_and(new_result,b_mask)

contours, hierarchy = cv2.findContours(img_result, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img, contours, -1, (0,255,0), 2)
cv2.imshow('result',img)
cv2.waitKey(0)```
读过吗

这是否适用于装配线上多个焊接接头的自动加工?这是否必须适用于许多其他类似的图像?在这种情况下,对单个图片的算法进行微调是没有意义的

如果是,则需要使用更多图像来创建算法,可能需要使用不同的灯光设置,可能需要在焊接后立即使用红外摄像机拍摄图像以获得“热”遮罩。或者分别使用左、右视线的光线将两幅图像合并为一个标记

另一件非常有用的事情是从零件中获得“之前”的图像。没有焊接接头。那样的话,事情就容易了。您只需创建图像之间的差异,进行一些过滤以删除焊道和红色层

编辑1:


另一件我忘了提及的事情是,请分别查看RGB层。这是你应该尽早尝试的事情。通常有一些有用的东西可以看,例如,在你的例子中,蓝色层可能很有趣。请在问题中添加图层。

是。它必须处理许多焊接接头(16幅图像)。你说的完全正确,因为当我尝试平滑和检测一张图像时,结果与第一张图像的结果不同。我在想,如果有人有一个想法,可以帮助我自动化上述算法,这样它就可以正确或近似地检测其余图像的焊接接头添加更多信息(关于RGB)。只有一件事:像这样的图像处理通常是反复试验。有一些概念需要应用,但您通常需要进行大量微调才能真正满足您的需要。感谢您的贡献。。。。。你的意思是你需要上传更多的图像(RGB)吗?这将使我们有可能做出贡献。但你肯定应该看看它们。我有一种感觉,蓝色层可能很有趣。