本项目所要扣的物体是裂缝,也适用于其他的物体目标。
先对图像进行二值化;
再对图像求连通区域(Opencv–API);
挑选最大的连通区域位置(原图像0位置除外);
对该连通区域进行保存。
计算不规则连通区域
图像二值化函数
膨胀、腐蚀、开/闭操作
import cv2
import numpy as np
def getRec(img):
img2 = img.copy()
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
# 可能存在断的裂缝,存在多个连通区域,此时进行膨胀操作
img = cv2.dilate(img, kernel, 3)
# 求黑白图像中的连通区域
_, _, stats, _ = cv2.connectedComponentsWithStats(img, connectivity=8)
img1 = np.zeros_like(img)
a = [s[-1] for s in stats[1:]]
a = np.array(a)
# 选择最大的连通区域,作为裂缝区域
ind = np.argmax(a) + 1
# 存储裂缝区域的外接矩形
x, y, h, w = stats[ind][0], stats[ind][1], stats[ind][2], stats[ind][3]
img1 = img2[y:y+w, x:x+h]
return img1
img_name = 'a.jpg'
img = cv2.imread("image/ori/" + img_name, 0)
img1 = getRec(img)
cv2.imwrite('image/final/'+ img_name, img1)
4.1 原图像
4.2 处理后
阅读量:1227
点赞量:0
收藏量:0