直线扫描法,填充(闭合?)区域

写着玩的,不知道正经的直线扫描法是不是这样的。
效果不好,图像像素的情况不像是想象的那么简单。
使用横向和纵向的线条找出闭合的区域
结果为 横向图像的闭合 与 纵向图像的闭合 结果的 交集。
不放图片。

结果有线条感,可能在更加简单的图形中能用。图像中有复杂实体的情况几乎没法用。

#!/usr/bin/env python 
# -*- coding:utf-8 -*-
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import numpy as np
from PIL import Image
import os
import cv2


# 划线法
def fulling(img):
    img1 = img.copy()
    img2 = img.copy()

    # 横向
    flag = False
    for i in range(img.shape[0]):
        for j in range(img.shape[1]):
            if img[i][j] == 255:
                flag = not flag
                while img[i][j] == 255:
                    j += 1
                    if j >= img.shape[1]:
                        break
            if j >= img.shape[1]:
                break
            if flag == True:
                img1[i][j] = 255
        flag = False
    cv2.imshow("1", img1)
    # 纵向
    flag = False
    for i in range(img.shape[1]):
        for j in range(img.shape[0]):
            if img[j][i] == 255:
                flag = not flag
                while img[j][i] == 255:
                    j += 1
                    if j >= img.shape[0]:
                        break
            if j >= img.shape[0]:
                break
            if flag == True:
                img2[j][i] = 255
        flag = False
    cv2.imshow("2", img2)
    img = img1 & img2
    # cv2.imshow("3", img)
    cv2.waitKey(0)
    return img


# [ 0000000010000000001000000 ]
def one_picture(src):
    # breakpoint_connect_path = r'./pictures/output_canong3_canonxt_sub_05.tif'
    # save_path=r''
    # breakpoint_connect_mask = Image.open(breakpoint_connect_path)
    if src.split() == 3:
        src = src.split()[0]
    img = np.asarray(src)
    print(img)
    img = fulling(img)
    cv2.imwrite("pictures/pic.png", img)


def all_picture_full(input, output):
    src_path = input
    save_path = output
    for index, item in enumerate(os.listdir(src_path)):
        _src_path = os.path.join(src_path, item)
        _save_path = os.path.join(save_path, item)
        pred_mask = Image.open(_src_path)
        if pred_mask.split() == 3:  # 若为3rgb图像 则会读取为灰度
            pred_mask = pred_mask.split()[0]
        pred_mask = np.array(pred_mask)

        _mask_after_full = fulling(pred_mask)  # 关键函数

        _mask_after_full = Image.fromarray(_mask_after_full.astype(np.uint8))
        _mask_after_full.save(_save_path)
        print("{}/{}".format(index + 1, len(os.listdir(src_path))))
        print(item)


if __name__ == '__main__':
    # breakpoint_full_path = r'./pictures/output_canong3_canonxt_sub_05.tif'
    # breakpoint_full_mask = Image.open(breakpoint_full_path)
    # one_picture(breakpoint_full_mask)  # 单张图片测试
    src_path = r'C:\Users\brighten\Desktop\0324_两阶段_0306模型,只监督条带区域,带8张图\columb\result2'
    save_path = r'C:\Users\brighten\Desktop\0324_两阶段_0306模型,只监督条带区域,带8张图\columb\result3'
    all_picture_full(src_path, save_path)  # 文件夹内所有图片

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值