DIP——边缘提取与分割

1.使用canny算法进行边缘提取
本实验比较简单,基本思路是对原图像进行一个高斯模糊处理,用于去噪,之后转换为灰度图,直接调用cv库中的canny记性边缘提取。若想直接得到彩色边缘,则通过按位与操作,将原始彩色图像和Canny边缘图像结合,得到彩色边缘图。具体完整代码如下:

# canny边缘提取实验
import cv2 as cv
import numpy as npdef edge_demo(image):# 对输入的图像进行高斯模糊,去噪,其中高斯核模板大小为3*3,标准差为0blurred = cv.GaussianBlur(image, (3, 3), 0)# 转换为灰度图gray = cv.cvtColor(blurred, cv.COLOR_BGR2GRAY)# 使用Canny边缘检测算法,设置低阈值为50,高阈值为150,提取图像的边缘。经验设定edge_output = cv.Canny(gray, 50, 150)# 在窗口中显示Canny边缘提取的结果图像。cv.imshow('Canny Edge', edge_output)# 彩色边缘提取# 通过按位与操作,将原始彩色图像和Canny边缘图像结合,得到彩色边缘图。dst = cv.bitwise_and(image, image, mask=edge_output)cv.imshow('Color Edge', dst)# 绘图
src = cv.imread('ai.jpg')
cv.namedWindow('input image', cv.WINDOW_AUTOSIZE)
cv.imshow('input image', src)
edge_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

实验结果
原始图像:
在这里插入图片描述
灰度处理后canny算法提取的边缘图像
在这里插入图片描述
彩色边缘图像
在这里插入图片描述
2.使用大津法进行图像分割
本实验的原理也比较简单,使用大津法进行图像分割。大津法(Otsu’s Method)是一种自适应阈值选取的方法,通常用于图像分割。其目标是通过最大化类间方差(类间方差是指分割后的两个类别之间的方差)来找到一个合适的阈值,将图像分为两个类别,一类为前景,一类为背景。这里我们绘制灰度直方图,并且使用OpenCV的threshold函数进行OTSU阈值化。并且将计算得到的阈值存储在 ret1 中,OTSU阈值化后的图像存储在 th1 中。其完整代码如下:

import cv2
import numpy as np
from matplotlib import pyplot as pltimage = cv2.imread("flying_horse.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)plt.figure(figsize=(6, 6))
plt.imshow(image, cmap="gray")
plt.title("Source Image")
plt.xticks([]), plt.yticks([])
plt.show()# 显示直方图
plt.figure(figsize=(6, 6))
# np.histogram 用于计算直方图的频率和边界。
hist, bins = np.histogram(image.ravel(), 256, [0, 256])
plt.plot(hist, color='black')
plt.title("Histogram")
plt.xlabel("Pixel Value")
plt.ylabel("Frequency")
plt.show()# 使用OpenCV的threshold函数进行OTSU阈值化。
# 将计算得到的阈值存储在 ret1 中,OTSU阈值化后的图像存储在 th1 中。
ret1, th1 = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU)# 显示OTSU阈值化后的图像
plt.figure(figsize=(6, 6))
plt.imshow(th1, cmap="gray")
plt.title("OTSU, Threshold: {}".format(ret1))
plt.xticks([]), plt.yticks([])
plt.show()

实验结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/212822.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ingress介绍和ingress通过LoadBalancer暴露服务配置

目录 一.ingress基本原理介绍 1.将原有用于暴露服务和负载均衡的服务的三四层负载均衡变为一个七层负载均衡 2.controller和ingress 3.通过下面这个图可能会有更直观的理解 二.为什么会出现ingress 1.NodePort存在缺点 2.LoadBalancer存在缺点 三.ingress三种暴露服务的…

基于JavaWeb+SSM+Vue微信小程序的科创微应用平台系统的设计和实现

基于JavaWebSSMVue微信小程序的科创微应用平台系统的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 Lun文目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关技术…

Linux Component概述和高通component的使用

1 Linux为什么要引入Component框架? 为了让subsystem按照一定顺序初始化设备才提出来的。 subsystem中由很多设备模块,内核加载这些模块的时间不确定。子系统内有些模块是需要依赖其它模块先初始化才能进行自己初始化工作(例如v4l2 subdev和v4l2 video …

【C语言程序设计】编写简单的C程序

目录 前言 一、程序设计 二、程序改错 三、程序完善 总结 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo__✍️原创,首发于CSDN📚。 📣如…

unity 2d 入门 飞翔小鸟 死亡 显示GameOver(十四)

1、添加Img create->ui->img 把图片拖进去 2、和分数一样、调整位置 3、修改角色脚本 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Fly : MonoBehaviour {//获取小鸟(刚体)private Rigidbod…

【Apipost】批量删除我的51CTO文章

文章目录 一、序二、API分析三、Apipost测试四、脚本五、Apipost中完成 一、序 去年开始再51CTO同步更新文章,一年多过去了,只涨了3个粉丝。看了下这个平台就是卖课、搞培训的,退出了。决定把文章也删除了(有人私信我说专门注册了…

ToolkenGPT:用大量工具增强LLM

深度学习自然语言处理 原创作者:cola 用外部工具增强大型语言模型(LLM)已经成为解决复杂问题的一种方法。然而,用样例数据对LLM进行微调的传统方法,可能既昂贵又局限于一组预定义的工具。最近的上下文学习范式缓解了这一问题,但有…

Shell 常用命令详解-上

Shell 常用命令详解-上 1.目录查阅相关命令2.文件操作相关命令 1.目录查阅相关命令 ll 命令 命令描述:ll命令用于显示指定工作目录下的内容。 命令格式:ll [参数] [目录名]。 参数说明: 参数说明-a显示所有文件及目录(包括隐藏文…

【机器学习】041_模型开发迭代过程

一、模型开发的一般步骤 1. 明确研究问题 确定问题的组成和结果,明晰问题是分类问题还是回归问题 2. 决定系统总体架构 ①理解数据:采集(爬取)数据,生成(导入)数据,进行数据清洗…

代码随想录二刷 |二叉树 |101. 对称二叉树

代码随想录二刷 |二叉树 |101. 对称二叉树 题目描述解题思路 & 代码实现递归法迭代法使用队列使用栈 题目描述 101.对称二叉树 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,…

zcms企业官网建站系统源码搭建-支持页面自定义

1.支持mysql,sqlite,access三种数据库。 2.模板和标签与asp版的zzzcms通用。 3.asp版的zzzcms的access数据库可直接使用。 4.支持手机站。 (增删改查不做描述): 网站信息 名称,logo,微信&…

基于OpenCV的流水线包装箱检测计数应用(附源码)

导 读 本文主要介绍基于OpenCV的流水线包装箱检测计数应用,并给出源码。 资源下载 完整代码和视频下载地址: https://github.com/freedomwebtech/rpi4-conveyor-belt-boxces-counter 核心代码如下(cboxtest.py): import cv2import numpy as npfrom tracker import*cap=c…

【MYSQL】单表查询

查询语法: select 字段(*表示全字段) from 数据表 【where 条件表达式】 【group by 分组字段【having 分组条件表达式】】 【order by 排序字段【asc | desc】】 例子: 教职工表Teacher(Tno, TName, age, sal, mgr, DNo)&#…

C# 图解教程 第5版 —— 第17章 转换

文章目录 17.1 什么是转换17.2 隐式转换17.3 显示转换和强制转换17.4 转换的类型17.5 数字的转换17.5.1 隐式数字转换17.5.2 溢出检测上下文17.5.3 显示数字转换 17.6 引用转换17.6.1 隐式引用转换17.6.2 显式引用转换17.6.3 有效显式引用转换 17.7 装箱转换17.7.1 装箱是创建副…

MySQL - 聚簇索引和非聚簇索引,回表查询,索引覆盖,索引下推,最左匹配原则

聚簇索引和非聚簇索引 聚簇索引和非聚簇索引是 InnoDB 里面的叫法 一张表它一定有聚簇索引,一张表只有一个聚簇索引在物理上也是连续存储的 它产生的过程如下: 表中有无有主键索引,如果有,则使用主键索引作为聚簇索引;…

【Scala】Scala中的一些基本数据类型的特性 列表、元组、构造器、单例对象、伴生类、伴生对象、抽象类与特质

列表 使用List(“”,“”,“”)去声明 sliding 和 groued表示迭代器 val iter List("Hadoop", "Spark", "Scala") sliding 2// sliding 和 groued 是有区别的while (iter.hasNext){println(iter.next())}for (elem <- iter){println(elem)}…

极速学习SSM之SpringMVC笔记

文章目录 一、SpringMVC简介1、什么是MVC2、什么是SpringMVC3、SpringMVC的特点 二、HelloWorld1、开发环境2、创建maven工程a>添加web模块b>打包方式&#xff1a;warc>引入依赖 3、配置web.xmla>默认配置方式b>扩展配置方式 4、创建请求控制器5、创建springMVC…

Kafka 最佳实践:构建可靠、高性能的分布式消息系统

Apache Kafka 是一个强大的分布式消息系统&#xff0c;被广泛应用于实时数据流处理和事件驱动架构。为了充分发挥 Kafka 的优势&#xff0c;需要遵循一些最佳实践&#xff0c;确保系统在高负载下稳定运行&#xff0c;数据可靠传递。本文将深入探讨 Kafka 的一些最佳实践&#x…

四. 基于环视Camera的BEV感知算法-环视背景介绍

目录 前言0. 简述1. 环视背景介绍2. 环视思路3. 主流基于环视Camera的算法详解总结下载链接参考 前言 自动驾驶之心推出的《国内首个BVE感知全栈系列学习教程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习下课程第四章——基于环视Camer…

基于Spring+Spring boot的SpringBoot在线电子商城管理系统

SSM毕设分享 基于SpringSpring boot的SpringBoot在线电子商城管理系统 1 项目简介 Hi&#xff0c;各位同学好&#xff0c;这里是郑师兄&#xff01; 今天向大家分享一个毕业设计项目作品【基于SpringSpring boot的SpringBoot在线电子商城管理系统】 师兄根据实现的难度和等级…