实现效果图:

同时还使用了 mask图,要识别的区域为白色,背景为黑色

import cv2
import numpy as np
import os.path as osp
import os
import numpy as np
from tqdm import tqdm
from skimage import morphology
from skimage import segmentationdef get_ori_list(ori_folder):img_list = os.listdir(ori_folder)ori_list = []for img_name in img_list:flag = 0 for sample in check_list:if sample in img_name:flag=1breakif flag==0:ori_list.append(osp.join(ori_folder,img_name))if len(ori_list)>20:breakreturn ori_listcheck_list = ['copper','bg','check','dust']
"""超像素由一系列位置相邻且颜色、亮度、纹理等特征相似的像素点组成的小区域。
这些小区域大多保留了进一步进行图像分割的有效信息,且一般不会破坏图像中物体的边界信息,
用少量的超像素代替大量像素表达图像特征,降低了图像处理的复杂度,
一般作为分割算法的预处理步骤。"""def get_reverse(pic_matrix):where_0 = np.where(pic_matrix == 0)where_255 = np.where(pic_matrix == 255)pic_matrix[where_0] = 255pic_matrix[where_255] = 0return pic_matrixdef use_slic_by_SLIC(img_path,mask_path,end_path):"""https://scikit-image.org/docs/dev/auto_examples/segmentation/plot_mask_slic.html#sphx-glr-auto-examples-segmentation-plot-mask-slic-py"""image = cv2.imread(img_path)#image = cv2.resize(image,(256,256))mask_image = cv2.imread(mask_path)#mask_image = get_reverse(mask_image)# kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2, 2))# mask_image = cv2.dilate(mask_image, kernel)#mask_image = cv2.resize(mask_image,(256,256))img_R = mask_image[:,:,0]mask = img_R>220# 生成扁平的盘状结构元素 skimage.morphology.diskmask = morphology.opening(mask, morphology.disk(10))#mask是一个只包含True和False的ndarray,它的shape和data一致,# segmentation.slic在Color-(x,y,z)空间中使用k-means聚类来分割图像。m_slic = segmentation.slic(image, n_segments=20000, mask=mask)slic_image = segmentation.mark_boundaries(image, m_slic,outline_color=(0,1,1))cv2.imwrite(end_path,slic_image*255)  return slic_image*255if __name__ == '__main__':ori_folder = '/cloud_disk/users/huh/dataset/PCB/ddrnet_23_slim/pre_process_img'end_folder = '/cloud_disk/users/huh/pcb/script/slic_result/1_cv2'ori_list = get_ori_list(ori_folder)for img_path in tqdm(ori_list):end_path = osp.join(end_folder,osp.basename(img_path))mask_path = osp.join(ori_folder,osp.basename(img_path[:-4])+'_bg_mask.jpg')try:slic_image = use_slic_by_SLIC(img_path,mask_path,end_path)# slic_image = cv2.imread(osp.join('/cloud_disk/users/huh/pcb/script/slic_result/1_without_small',osp.basename(img_path)))#slic_image = cv2.resize(slic_image,(512,512))#remove_small_objects(mask_path,end_path,img_path,slic_image)except ValueError:print(end_path)

opencv实现超像素分割(slic实现)相关推荐

  1. julia 调用python库_Julia调用Python实现超像素分割SLIC算法

    最近想要在julia中实现 Simple Linear Iterative Clustering (SLIC) 算法对图像进行超像素分割,关于SLIC超像素分割算法,请参考SLIC Superpixe ...

  2. VLFeat SLIC超像素分割(Cpp版)

    这段时间对VLFeat的C接口非常的感兴趣,以前用的都是其Matlab接口,虽然很方便,而且提供的Matlab接口要比C接口功能更强大,但Matlab终归只能用来做一下快速的方法验证,所以想比较完整的 ...

  3. python-opencv实现图像超像素分割(SLIC、SEEDS、LSC)

    转载自:苏格拉- PYTHON - OPENCV实现图像超像素分割(SLIC.SEEDS.LSC) 超像素 超像素是把一张图片中具有相似特征的像素进行聚类,形成一个更具有代表性的大"像素&q ...

  4. 图像分割:Python的SLIC超像素分割

    图像分割:Python的SLIC超像素分割 1. 什么是超像素? 2. 为什么超像素在计算机视觉方面有重要的作用? 3. 简单线性迭代聚类(SLIC) 4. 效果图 5. 源码 参考 1. 什么是超像 ...

  5. SLIC超像素分割方法

    为了方便查找,记录SLIC超像素分割方法的介绍 简介 关键代码分析 应用

  6. SLIC 超像素分割详解(三):应用

    看过上面的介绍后,我们应该思考一下:分割好的超像素有什么用?怎么用?用到哪里? 首先,超像素可以用来做跟踪,可以参考卢湖川课题组发表在IEEE TIP上的<Robust superpixeltr ...

  7. SLIC超像素分割的算法介绍和源码分析

    前述 最近在看显著性检测,发现很多算法的基础是超像素分割,而正在看的Saliency Optimization from Robust Background Detection算法的预处理是SLIC算 ...

  8. MATLAB显示slic,quickshift超像素分割结果图

    首先介绍vlfeat库函数:vl_slic,vl_quickshift,vl_quckseg vl_slic  SLIC superpixels segments = vl_slic(im,regio ...

  9. 超像素分割(Slic算法)——个人梳理

    一.使用背景 我在进行乳腺癌图像识别的学校项目中,参考了山东大学的硕士论文,并希望加以简化复现,此论文会在文末附上.项目要求我们需要对乳腺癌图片进行分类(无肿瘤,良性肿瘤,恶性肿瘤),参照论文所说,我 ...

  10. SLIC超像素分割详解

    SLIC超像素分割详解(一) 超像素概念是2003年Xiaofeng Ren提出和发展起来的图像分割技术,是指具有相似纹理.颜色.亮度等特征的相邻像素构成的有一定视觉意义的不规则像素块.它利用像素之间 ...

最新文章

  1. MATLAB 不能用了,哪些替代品可以继续搞科研?
  2. 前端学PHP之文件操作
  3. jQuery在页面加载的时候自动调用某个函数的方法(转载)
  4. symfony开发步骤简述
  5. 【模型迭代】拒绝推断(RI)
  6. Springboot mybatis逆向工程org.springframework.beans.factory.BeanCreationException: Error creating bean错误
  7. 搭建认证服务器 - Spring Security Oauth2.0 集成 Jwt 之 【密码认证流程】 总结
  8. 求n的阶乘的算法框图_单片机常用的14个C语言算法
  9. 工作381-兼容移动端头部
  10. 判断是否是完全二叉树和是否为满二叉树
  11. JavaScript 是如何工作的:WebRTC和对等网络的机制!
  12. 01.ZooKeeper安装和介绍
  13. 基于RV1126平台imx291分析 --- 基于subdev的方式
  14. 永中office for linux rpm,新闻|永中Office 2012 青年版 For Linux
  15. **python入门实战**-华氏度转摄氏度python代码
  16. Python乌龟吃鱼小游戏
  17. Play框架文件上传
  18. 公司股权结构设计的原则与因素
  19. 离散数学4_第5章关系与函数__关系矩阵
  20. 学习CPP看过的博客

热门文章

  1. 炫酷神器,AE插件Bodymovin.zxp的安装与使用
  2. Win XP 经典壁纸拍摄地 24 年后变样了
  3. iOS手势的传递问题
  4. lua源码分享适用脚本chiji游戏
  5. Eclipse+Maven搭建Wbe项目(1)
  6. css 面试题画三角
  7. Android机顶盒网络地址端口连通性测试
  8. 华为手机邮箱发件服务器端口设置,华为手机设置-华为手机POP3设置
  9. 视频怎么转换html代码实现,音视频格式转换神器与html视频元素加字幕——零基础自学网页制作...
  10. ug中文字大小设置_UG编辑文字怎么放大或缩小?