Gitee地址:https://gitee.com/jzhou955/edge_detection.git
欢迎 star or fork。
项目需求
- 检测图片中特定部分的轮廓。
- 单纯用边缘提取算子处理图片得到的效果并不理想。由于图片边缘两边的颜色差异较大,考虑用色域分离的方法进行边缘提取。
- 但是在识别轮廓的过程中我发现,处理后的照片有非常多的噪声干扰,使得结果图片的质量非常差。这就需要我们在提取轮廓之前,提取轮廓过程中以及提取轮廓之后,对图片做一系列的滤波降噪处理。
- 由于在一张图片中,A方法提取部分1的效果比较好,B方法提取部分2 的效果比较好,因此我们希望能够整合多种方法对一张图片进行处理,用局部最优以求全局最优。
相关代码
# 提取边缘图中的点集
def scan_pic(edge_img):
points = []
img_info = edge_img.shape
rows = img_info[0]
cols = img_info[1]
for i in range(rows):
for j in range(cols):
k = edge_img[i, j] # 二值图的像素点
if not k == 0:
points.append([j, i])
return points
def write_res2img(points, img):
# 把边缘图和原图重合
img_array = np.array(img)
img2_array = img_array
for p in points:
img2_array[p[0],p[1]]=np.array([0, 255, 255])
return img2_array
def write2PicAlpha(points, img):
# 把边缘图和原图叠加,通过调整透明度叠加。
mask = img.copy()
for point in points:
cv.circle(mask, (point[0], point[1]), 1, (0, 255, 0))
alpha = 0.25
result = cv.addWeighted(mask, alpha, img, 1 - alpha, 0)
return result