首页 > 编程语言 >使用分水岭算法实现分割图像

使用分水岭算法实现分割图像

时间:2024-10-24 17:09:15浏览次数:7  
标签:sure img fg imshow cv2 算法 图像 closing 分水岭

#导包:cv2视觉、numpy数组
import cv2
import numpy as np
#加载图片
img =cv2.imread('mourse.jpg')
cv2.imshow('ori',img)
#转换图片为黑白色
gray =cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#将图片阈值分割
ret,thresh =cv2.threshold(gray,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
cv2.imshow('thresh',thresh)
#腐蚀图片
kernel =np.ones((3,3),np.uint8)
opening =cv2.morphologyEx(thresh,cv2.MORPH_OPEN,kernel,iterations=2)
cv2.imshow('opening',opening)

closing =cv2.morphologyEx(opening,cv2.MORPH_CLOSE,kernel,iterations=20)
cv2.imshow('closing',closing)
#膨胀图片
sure_bg =cv2.dilate(closing,kernel,iterations=3)
cv2.imshow('sure_bg',sure_bg)
#图像分割
dist_transform =cv2.distanceTransform(closing,1,5)
ret,sure_fg =cv2.threshold(dist_transform,0.3 * dist_transform.max(),255,0)
cv2.imshow('sure_fg',sure_fg)
#转换数据类型
sure_fg =np.uint8(sure_fg)
unknown =cv2.subtract(sure_bg,sure_fg)
cv2.imshow('unknown',unknown)

ret,markresl =cv2.connectedComponents(sure_fg)

maekers =markresl+1

maekers[unknown ==255] =0

markers3 =cv2.watershed(img,maekers)

img[markers3 == -1] =[0,255,0]
cv2.imshow('img',img)

cv2.waitKey(0)

标签:sure,img,fg,imshow,cv2,算法,图像,closing,分水岭
From: https://www.cnblogs.com/luzhangan/p/18499986

相关文章

  • 最强总结!十大回归类算法模型 !!!
    1.线性回归线性回归是一种用于描述两个或多个变量之间线性关系的统计模型。假设  是响应变量(目标变量), 是解释变量(特征),线性回归模型通过拟合一条直线来预测目标变量。原理线性回归的基本假设是:其中, 是截距, 是回归系数, 是误差项(即残差),假设其服从正态分布。核心公式......
  • 蓝牙室内定位算法-蓝牙ibeacon室内定位技术方案
    随着科技的飞速发展,室内定位技术已成为现代生活中的重要组成部分。在众多室内定位技术中,蓝牙技术凭借其低功耗、高精确度以及广泛的设备兼容性,逐渐在室内定位领域崭露头角。其中,蓝牙iBeacon技术更是凭借其独特的优势,成为室内定位领域的佼佼者。本文将深入探讨蓝牙iBeacon室内定......
  • 图像修复
    测试opencv图像修复函数inpaint#include<opencv2/opencv.hpp>#include<iostream>intmain(){////加载图像//cv::Matimage=cv::imread("D:/material0000.png",cv::IMREAD_UNCHANGED);//替换为你的图像路径//if(image.empty())//{//std......
  • 常用距离算法
    常用距离算法对于两个点$(x_1,y_1)$和$(x_2,y_2)$的距离大致有$3$种:欧氏距离曼哈顿距离切比雪夫距离三维情况下表示为$(x_1,y_1,z_1)$和$(x_2,y_2,z_2)$。多维情况下表示为$(x_1,x_2,...,x_d)$和$(y_1,y_2,...,y_d)$,其中$d$表示维数(与二、三维表示有所不同)......
  • 非煤矿山算法视频分析服务器皮带运行状态识别视频智能AI分析系统建设方案设计
    一、建设背景近年来,我国在非煤矿山的安全生产方面虽然取得了一定的进展,但整体安全基础仍然不牢固,事故数量依然较多,并且尚未从根本上控制住重大事故的发生,整体安全生产的形势依旧严峻且充满复杂性。根据国家矿山安全监察局发布的《关于煤矿及关键非煤矿山重大灾害风险防控体系建......
  • 使用OpenSSl库实现AES-GCM-128算法(C语言)
    在C语言中使用OpenSSL库实现AES-GCM-128算法,并生成GMAC(GaloisMessageAuthenticationCode)消息认证码,通过以下步骤完成:初始化加密环境:创建一个EVP_CIPHER_CTX结构体,用于存储加密过程中的所有必要信息。设置加密算法:指定使用AES-GCM模式,以及密钥和IV(初始化向量)。处理附加认证......
  • RSA算法详解及相关数学原理解析
    RSA算法详解及相关数学原理解析前言‍为了记录自己学习密码学的过程,也是为了便于个人应付相关课程的考核,故写此博客。本博客总结了怎么用C++手搓一个RSA算法,以及补补欠缺的一些数学知识和可能欠缺的一些其他算法的实现。参考了其他人的相关博客,用便于我自己理解的话和方式和......
  • 大二上 数据结构与算法笔记 20241024
    一.inline在C和C++编程语言中,inline关键字是一种函数修饰符,用于建议编译器在编译时将函数的代码直接插入到每个函数调用的地方,而不是进行常规的函数调用。这样做的目的是减少函数调用的开销,尤其是在函数体较小且调用频繁的情况下。作用和优点:减少函数调用开销:通过将函数......
  • 数据结构与算法——双链表的实现
    上次学习了单链表,这次来学习双链表。二者之间的区别是,单链表中的每个结点只存有后继结点的地址,而双链表中则存了两个地址,一个是前驱结点的地址,一个是后继结点的地址。结构体structListNode{ intelement;//数据域 structListNode*next; ......
  • 基于Fluent和深度学习算法驱动的流体力学计算与应用
    机器学习与流体力学入门一、流体力学基础理论与编程实战1、流体力学的发展概述2、不可压缩流体力学的基本方程3、偏微分方程数值求解介绍4、傅里叶变换和流体的尺度分析5、伪谱法求解不可压缩流体力学方程案例实践:1、Matlab编程实现有限差分(案例数据与代码提供给学员)2......