【openCV边缘检测】用传统方法实现边缘检测(四)分块处理

Gitee地址:https://gitee.com/jzhou955/edge_detection.git
欢迎 star or fork。

项目需求

  1. 检测图片中特定部分的轮廓。
  2. 单纯用边缘提取算子处理图片得到的效果并不理想。由于图片边缘两边的颜色差异较大,考虑用色域分离的方法进行边缘提取。
  3. 但是在识别轮廓的过程中我发现,处理后的照片有非常多的噪声干扰,使得结果图片的质量非常差。这就需要我们在提取轮廓之前,提取轮廓过程中以及提取轮廓之后,对图片做一系列的滤波降噪处理。
  4. 由于在一张图片中,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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值