如何使用OpenCV Python顺利检测焊接接头?
我已尝试使用本问题最后一部分中随附的代码检测焊接接头(焊道)。我的目标是在关节上画一个轮廓,如第三张图所示,但我的结果很差,看起来与预期的结果不相似。以下是我所做工作的总结,但代码非常清楚: 1.读取图像如何使用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
.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)吗?这将使我们有可能做出贡献。但你肯定应该看看它们。我有一种感觉,蓝色层可能很有趣。