OpenCV基于均值漂移算法(pyrMeanShiftFiltering)的水彩画特效

1、均值漂移算法原理

pyrMeanShiftFiltering算法结合了均值迁移(Mean Shift)算法和图像金字塔(Image Pyramid)的概念,用于图像分割和平滑处理。以下是该算法的详细原理:

1.1 、均值迁移(Mean Shift)算法原理

  • 目标:均值迁移算法的目标是找到图像中颜色分布的峰值,这些峰值代表了图像中的不同区域或对象。
  • 特征空间:对于一幅彩色图像,每个像素点可以表示为一个五维向量(x, y, r, g, b),其中(x, y)是像素的位置坐标,(r, g, b)是像素的颜色值。
  • 迭代过程
  1. 以某个像素点P为圆心,构建一个空间球体(在特征空间中),球体的半径由空间域半径sr和颜色域半径sp决定。
  2. 在这个空间球体内,计算所有点相对于中心点P的色彩向量之和,然后移动中心点P到这个向量的终点,作为新的中心点P1。
  3. 重复上述步骤,直到中心点Pn不再移动,满足迭代终止条件(如达到最大迭代次数或迭代精度)。
  • 结果:经过迭代,收敛到同一点的起始点被归为一类,这些点的像素值被更新为该类中心点的像素值。这样,图像中的相似区域就被平滑处理,同时保留了边缘等差异较大的特征。

1.2 图像金字塔(Image Pyramid)原理

图像金字塔是一种多分辨率图像表示方法,通过将图像在不同尺度下进行下采样,生成一系列分辨率逐渐降低的图像。在pyrMeanShiftFiltering算法中,图像金字塔用于在不同尺度上对图像进行均值迁移滤波,从而增强算法对图像细节的捕捉能力。

2、 pyrMeanShiftFiltering算法实现

函数原型

dst = cv2.pyrMeanShiftFiltering(src, sp, sr[, dst[, maxLevel[, termcrit]]])

参数说明

src(输入图像):

  • 类型:8位、3通道图像。
  • 说明:这是待处理的源图像。

dst(输出图像):

  • 类型:与源图像格式和大小相同的图像。
  • 说明:这是处理后的输出图像。

sp(空间窗口半径):

  • 类型:double。
  • 说明:定义了像素在物理空间中的邻域范围。该值越大,表示考虑的邻域范围越广。

sr(颜色窗口半径):

  • 类型:double。
  • 说明:定义了像素在颜色空间中的邻域范围。该值越大,表示在颜色空间中考虑的相似颜色范围越广。

maxLevel(最大金字塔层级):

  • 类型:int。
  • 默认值:1。
  • 说明:用于控制图像金字塔的层级数。当maxLevel > 0时,会构建高斯金字塔,并在最小层上首先运行均值迁移过程。之后,结果会传播到较大的层,并且仅在金字塔较低分辨率层的颜色与当前层的颜色相差超过sr的像素上再次运行迭代。

termcrit(终止准则):

  • 类型:TermCriteria。
  • 默认值:TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS,5,1)。
  • 说明:定义了何时停止均值迁移迭代的条件。可以是迭代次数满足终止条件、迭代目标与中心点偏差满足终止条件,或者两者的结合。

处理过程

  • 首先,在最高尺度的图像上应用均值迁移滤波。
  • 然后,将滤波后的图像下采样到下一尺度,并重复应用均值迁移滤波。
    这个过程一直持续到达到指定的金字塔层次max_level。
  • 输出:算法输出一张经过平滑处理和分割的图像。在这张图像中,相似颜色的区域被平滑处理,不同区域之间的边缘被保留下来。

效果调试
pyrMeanShiftFiltering算法在图像分割、平滑处理、特征提取等方面有广泛应用。通过调整算法参数(如sp、sr、max_level等),可以获得不同的处理效果。例如,较大的sp和sr值会导致更强烈的平滑效果,而较小的值则能保留更多的图像细节。

3、基于均值漂移的水彩画特效

import cv2 as cv
import numpy as npif __name__ == '__main__':#读取原始图像image = cv.imread('oldman.jpg', cv.IMREAD_COLOR)#均值漂移分割meanshift = cv.pyrMeanShiftFiltering(image, 16, 64, 2)#高斯平滑gaussian_filter = cv.GaussianBlur(meanshift, (3, 3), 0.8)#中值滤波result = cv.medianBlur(gaussian_filter, 3)ada_result = np.concatenate((image, result), axis=1)cv.imwrite('wash-painting.jpeg', ada_result)cv.waitKey()

在这里插入图片描述

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

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

相关文章

【数学】概率论与数理统计(五)

文章目录 [toc] 二维随机向量及其分布随机向量离散型随机向量的概率分布律性质示例问题解答 连续型随机向量的概率密度函数随机向量的分布函数性质连续型随机向量均匀分布 边缘分布边缘概率分布律边缘概率密度函数二维正态分布示例问题解答 边缘分布函数 二维随机向量及其分布 …

四 BH1750 光感驱动调试2

之前调通了用户态接口,android 使用还是不方便,要包装jni使用。 这里集成了内核 iio 驱动 ,提供 sys-fs 文件接口 可供固件以及 ANDROID 应用层使用 一 驱动集成 : 1.1 dts 修改 修改文件 : kernel/arch/arm64/boot/dts/rockchip/rp-rk3568.dts 在 i2c5 增加设备,如…

Redis持久化双雄

Redis持久化 Redis 的持久化是指将内存中的数据保存到硬盘,以防止服务器宕机导致数据丢失的机制。 redis 提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)。 RDB,简…

工业视觉2-相机选型

工业视觉2-相机选型 一、按芯片类型二、按传感器结构特征三、按扫描方式四、按分辨率大小五、按输出信号六、按输出色彩接口类型 这张图片对工业相机的分类方式进行了总结,具体如下: 一、按芯片类型 CCD相机:采用电荷耦合器件(CC…

数字证书管理服务

阿里云数字证书管理服务(Aliyun Certificate Management Service, ACM)是一种云端服务,专门用于帮助企业管理和颁发数字证书。数字证书是网络安全中的重要组成部分,它可以确保通信的安全性、身份认证以及数据的完整性。通过阿里云…

《跟我学Spring Boot开发》系列文章索引❤(2025.01.09更新)

章节文章名备注第1节Spring Boot(1)基于Eclipse搭建Spring Boot开发环境环境搭建第2节Spring Boot(2)解决Maven下载依赖缓慢的问题给火车头提提速第3节Spring Boot(3)教你手工搭建Spring Boot项目纯手工玩法…

Zookeeper概览

个人博客地址:Zookeeper概览 | 一张假钞的真实世界 设计目标 简单的:方便使用以实现复杂的业务应用。复制式的:跟Zookeeper协调的分布式进程一样,它也是在一组服务器上复制的。集群的每个节点间互相知道。它们维护一个状态数据在…

播放音频文件同步音频文本

播放音频同步音频文本 对应单个文本高亮显示 使用audio音频文件对应音频文本资源 音频文本内容(Json) [{"end": 4875,"index": 0,"speaker": 0,"start": 30,"text": "70号二啊,","tex…

React中ElementFiber对象、WorkInProgress双缓存、ReconcileRenderCommit、第一次挂载过程详解

基础概念 Element对象与Fiber对象 Element对象与Fiber对象 Element 对象 定义 React 的 Element 对象是一个描述用户界面(UI)的普通 JavaScript 对象,通常由 React.createElement 或 JSX 语法生成。 作用 它是 React 应用中的一种描述 …

【airtest】自动化入门教程Poco元素定位

1. 前言 本文将详细讲解Poco控件定位的各种方式,利用这些方法可以帮助我们编写出目标控件的定位脚本。我们在IDE录制的poco脚本,常见的都是类似 poco(“star_single”).click()这样的脚本,其中 poco(“star_single”) 这块就属于Poco控件定位…

2025年01月13日Github流行趋势

1. 项目名称:Jobs_Applier_AI_Agent 项目地址url:https://github.com/feder-cr/Jobs_Applier_AI_Agent项目语言:Python历史star数:25929今日star数:401项目维护者:surapuramakhil, feder-cr, cjbbb, sarob…

[免费]SpringBoot+Vue新能源汽车充电桩管理系统【论文+源码+SQL脚本】

大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue新能源汽车充电桩管理系统,分享下哈。 项目视频演示 【免费】SpringBootVue新能源汽车充电桩管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息化时代的到来&#xff0…

【C++】字符串中的 insert 方法深层分析

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯一、基础知识:insert 方法概述功能描述函数原原型基本规则 💯二、例子解析例子 1:插入一个 std::string分析 例子 2:插入一个…

G-Star Landscape 2.0 重磅发布,助力开源生态再升级

近日,备受行业瞩目的 G-Star Landscape 迎来了其 2.0 版本的发布,这一成果标志着 GitCode 在开源生态建设方面又取得了重要进展。 G-Star Landscape仓库链接: https://gitcode.com/GitCode-official-team/G-Star-landscape 2024 GitCode 开…

Sui Move:基本概览一

Module (模块) Move 代码被组织成模块, 可以把一个模块看成是区块链上的一个智能合约 可以通过调用这些模块中的函数来与模块进行交互,可以通过事务或其他 Move 代码来实现, 事务将被发送到并由Sui区块链进行处理,一旦执行完成,结果的更改将…

不同方式获取音频时长 - python 实现

DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集,持续增加中。 需要更多数据资源和技术解决方案,知识星球: “DataBall - X 数据球(free)” -------------------------------------------------------------…

25年无人机行业资讯 | 1.1 - 1.5

25年无人机行业资讯 | 1.1 - 1.5 中央党报《经济日报》刊文:低空经济蓄势待发,高质量发展需的平衡三大关系 据新华网消息,2025年1月3日,中央党报《经济日报》发表文章指出,随着国家发展改革委低空经济发展司的成立&a…

frp内网穿透

frp CS搭建socks隧道 kali当作客户端,vps当作服务端,webshell机器上传后门,CS上线,使用CS自带socks搭建隧道 选择socks代理 服务端启动:frps -c frpssocks.toml serverAddr "47.104.216.23" serverPort…

【JVM-2.2】使用JConsole监控和管理Java应用程序:从入门到精通

在Java应用程序的开发和运维过程中,监控和管理应用程序的性能和资源使用情况是非常重要的。JConsole是Java Development Kit(JDK)自带的一款图形化监控工具,它可以帮助开发者实时监控Java应用程序的内存、线程、类加载以及垃圾回收…

Linux之读者写者模型与特殊锁的学习

目录 读者写者模型 特殊锁 悲观锁 自旋锁 在前几期,我们学习了多线程的生产者和消费者模型,生产者和消费者模型中,有三种关系,两个角色,一个场所,那么读者写者模型和生产者消费者模型有什么关联吗&…