图像膨胀+滤波达到边缘外扩模糊效果

有一个扯淡需求, 根据某些格网值渲染对应的颜色,  我们做的实现方案是按照色代码渐变做颜色映射, 但是某些厂家不顾结果正确性与否, 应是为了好看做的好看, 将边界膨胀模糊, 一个非风场,力场类似场数据做了一个类似场的渲染效果, 也不知道说啥好, 例如原始图渲染如下

经过一系列折腾最后只能做成如下下过了

 

 由于我们的边界和原始数据严格对应所以看起来有较多碎小区域,  不圆滑, 所以第一件事应该膨胀, 第二波用滤波重采样模糊下边界级别, 遂先用opencv验证():

 膨胀参数33, 再大无法看了

自行实现边界外扩一圈圈算法,效果如下,最后一幅没用中值滤波,因为太丑,换了高斯滤波:

 外扩主要算法如下:

 

//膨胀3*3
void expand(Buffer *SrcValueBuffer, int width, int height, double expend = 1, int kk = 3)
{Buffer k;k.AllocateT<Color>(width * height);k.Copy(SrcValueBuffer->BufferHead(), SrcValueBuffer->BufferSize());int m = kk;int n = kk;unsigned int * pSrcHead = (unsigned int*)(SrcValueBuffer->BufferHead());unsigned int * pDstHead = (unsigned int*)(k.BufferHead());int maskk = kk;int *maskkarry = new int[maskk];int maxdis = floor(maskk / 2.0);for (int i = 0; i < maskk; i++){maskkarry[i] = 0 - maxdis + i; }int maskm[3] = { -1,0,1 };int maskn[3] = { -1,0,1 };static Color nocolor = Color(0, 0, 0, 0);for (int i = 1; i < width - 1; i++){Color* data = (Color*)(pSrcHead + i * height);Color* kdata = (Color*)(pDstHead + i * height);for (int j = 1; j < height - 1; j++){Color col = *(data + j);if (col != nocolor)continue;int vagcount = 0;int R = 0, G = 0, B = 0, A = 0;for(int m=0; m < maskk; m++)for (int n = 0; n < maskk; n++){Color col0 = *((Color*)(pSrcHead + (i + maskkarry[m]) * height) + (j + maskkarry[n]));if (col0 != nocolor){R += col0.R;G += col0.G;B += col0.B;A += col0.A;vagcount++;}}if (vagcount <= 0)continue;*(kdata + j) = Color(R / vagcount,  G / vagcount, B / vagcount, A / vagcount);}}SrcValueBuffer->Swap(k);delete maskkarry;
}

 滤波就不写了,用stb_image库实现的,主要调用以下函数重采样

		float s0 = 0.; float t0 = 0; float s1 = 1.; float t1 = 1.; float *transform = 0;int channels = psrcdata->m_BandCount;int alpha_channel = -1;stbir_uint32 flags = 0;stbir_datatype type = TypeMapping(psrcdata->m_DataType);stbir_filter h_filter = ResampleFliter(rAlg);stbir_filter v_filter = ResampleFliter(rAlg);stbir_edge edge_horizontal = STBIR_EDGE_CLAMP;stbir_edge edge_vertical = STBIR_EDGE_CLAMP;//颜色空间stbir_colorspace colorspace = STBIR_COLORSPACE_LINEAR;stbir__resize_arbitrary(alloc_context,input_data, input_w, input_h, input_stride_in_bytes,output_data, output_w, output_h, output_stride_in_bytes,s0, t0, s1, t1, transform,channels, alpha_channel, flags, type,h_filter, v_filter,edge_horizontal, edge_vertical, colorspace) == 1;

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

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

相关文章

如何在PCB设计过程中处理好散热

在现代高性能电子设备中&#xff0c;散热是一个常见而重要的问题。正确处理散热问题对于确保电子设备的可靠性、稳定性和寿命至关重要。 下面将介绍在PCB设计过程中处理散热问题的方法和技巧&#xff0c;以帮助大家提高设计质量和性能。 首先&#xff0c;在处理散热问题之前&…

Pytorch深度学习-----神经网络之Sequential的详细使用及实战详解

系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用&#xff08;ToTensor&#xff0c;Normalize&#xff0c;Resize &#xff0c;Co…

shell脚本清理redis模糊匹配的多个key,并计算释放内存大小

#!/bin/bash# 定义Redis服务器地址和端口 REDIS_HOST"localhost" REDIS_PORT6380# 获取Redis当前内存使用量&#xff08;以字节为单位&#xff09; function get_redis_memory_usage() {redis-cli -h $REDIS_HOST -p $REDIS_PORT INFO memory | grep "used_memo…

UDS服务基础篇之31

UDS服务基础篇之31服务 前言 正如前文《UDS基础之2F服务》所说的2F服务与今天本文要将的31服务存在着有些相似之处&#xff0c;因此需要针对31服务本身进行较为细致的剖析&#xff0c;在此小T抛出如下几个基本问题供大家思考&#xff1a; 你知道31服务是干什么的吗&#xff…

CS 144 Lab Four -- the TCP connection

CS 144 Lab Four -- the TCP connection TCPConnection 简述TCP 状态图代码实现完整流程追踪 测试 对应课程视频: 【计算机网络】 斯坦福大学CS144课程 Lab Four 对应的PDF: Lab Checkpoint 4: down the stack (the network interface) TCPConnection 简述 TCPConnection 需要…

【腾讯云Cloud Studio实战训练营】使用React快速构建点餐H5

文章目录 前言一、Cloud Studio是什么二、Cloud Studio特点三、Cloud Studio使用1.访问官网2.账号注册3.模板选择4.模板初始化5.H5开发安装 antd-mobile安装 Less安装 normalize上传项目需要的素材替换App.js主文件项目启动、展示 6.发布仓库 总结 前言 随着云计算产业的发展&…

Milvus Cloud凭借AI原生,可视化优势荣登全球向量数据库性能排行榜VectorDBBench.com 榜首

在当今的大数据时代,随着人工智能技术的快速发展,向量数据库作为处理大规模数据的关键工具,其性能和效率越来越受到关注。最近,全球向量数据库性能排行榜 VectorDBBench.com 公布了一份最新的评估报告,引人瞩目的是,成立不到一年的新兴公司 Milvus Cloud 凭借其 AI 原生和…

33.利用abs 解决绝对值问题(matlab程序 )

1.简述 abs函数的功能是绝对值和复数的模 语法 Y abs(X) 说明 Y abs(X) 返回数组 X 中每个元素的绝对值。如果 X 是复数&#xff0c;则 abs(X) 返回复数的模。 示例 标量的绝对值 y abs(-5) y 5 向量的绝对值 创建实值的数值向量。 x [1.3 -3.56 8.23 -5 -0.01…

JVM GC ROOT分析

GC root原理:通过对枚举GCroot对象做引用可达性分析,即从GC root对象开始,向下搜索,形成的路径称之为 引用链。如果一个对象到GC roots对象没有任何引用,没有形成引用链,那么该对象等待GC回收,换而言之,如果减少内存泄漏,也就是切断引用链,常见的GCRoot对象如下: 1、…

【Java设计模式】建造者模式 注解@Builder

概念 将一个复杂对象的构造与它的表示分离&#xff0c;使同样的构建过程可以创建不同的表示。它使将一个复杂的对象分解成多个简单的对象&#xff0c;然后一步步构建而成。 每一个具体建造者都相对独立&#xff0c;而与其它的具体建造者无关&#xff0c;因此可以很方便地替换具…

SpringBoot使用redis作为缓存的实例

目录 什么是缓存&#xff1f; 缓存的作用&#xff1f; 缓存的成本&#xff1f; 实际项目中的应用 代码展示 什么是缓存&#xff1f; 缓存就是数据交换的缓冲区&#xff08;称作Cache [ kʃ ] &#xff09;&#xff0c;是存贮数据的临时地方&#xff0c;一般读写性能较高。 缓…

睡眠助手/白噪音/助眠夜曲微信小程序源码 附教程

简介&#xff1a; 睡眠助手/白噪音/助眠夜曲微信小程序源码 附教程 支持分享海报 支持暗黑模式 包含了音频数据 最近很火的助眠小程序&#xff0c;前端vue&#xff0c;可以打包H5&#xff0c;APP&#xff0c;小程序 后台可以设置流量主广告&#xff0c;非常不错的源码 代码完…