我正试图用OpenCv从下图中提取焊盘部分。 从这样的图像开始:
我正试图将其提取到如下图像中:
以这样的形象结束
我目前有以下几点
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('strip.png')
grayscale = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_, thresholded = cv2.threshold(grayscale, 0, 255, cv2.THRESH_OTSU)
bbox = cv2.boundingRect(thresholded)
x, y, w, h = bbox
foreground = img[y:y+h, x:x+w]
cv2.imwrite("output.png", foreground)
哪个输出:
如果你仔细观察图像的上下部分,它看起来更杂乱,而中间部分(这是你想要的输出)看起来柔软平滑
由于中心部分是均匀的,平滑过滤器(如侵蚀)不会对该部分产生太大的影响,否则上部会发生明显的变化
在第一步,我用一个简单的阈值去除黑色背景。此外,我对图像进行了一些平滑处理,计算结果与原始图像之间的差异,然后对最终结果进行阈值化以去除不需要的像素
然后我做了一些形态学处理来去除过程中残留的噪声。最后,在boundingRect命令的帮助下,我提取了所需的线段(白色轮廓):
删除背景:
侵蚀模糊后的差异图像:
打开过程后的差异图像和阈值:
最后是白色对象的边界框:
我编写的代码(C++opencv):
相关问题 更多 >
编程相关推荐