当前位置: 首页 > news >正文

在gpupixel中自定义锐化filter

文章目录

  • 基本的结构
  • 自定义头文件
  • 自定义源文件
  • 修改CMakeLists.txt
  • 参考

基本的结构

classCustomFilter:publicFilter{public:staticstd::shared_ptr<CustomFilter>Create();boolInit();virtualboolDoRender(boolupdateSinks=true)override;// Custom parameter settersvoidsetParameter(floatvalue);protected:CustomFilter(){};// Filter parametersfloat_parameter;};

自定义头文件

sharpen_filter.h

#pragmaonce#include"gpupixel/filter/nearby_sampling3x3_filter.h"#include"gpupixel/gpupixel_define.h"namespacegpupixel{classGPUPIXEL_APISharpenFilter:publicNearbySampling3x3Filter{public:staticstd::shared_ptr<SharpenFilter>Create();boolInit();virtualboolDoRender(boolupdateSinks=true)override;// 锐化强度:通常 0.0 到 4.0,0.0 为原图voidsetSharpness(floatsharpness);protected:SharpenFilter(){};floatsharpness_;};}// namespace gpupixel

自定义源文件

sharpen_filter.cc

#include"gpupixel/filter/sharpen_filter.h"#include"core/gpupixel_context.h"namespacegpupixel{// 锐化 Shader 逻辑:中心像素权重增加,周围像素权重减少conststd::string kSharpenFragmentShaderString=R"( precision mediump float; uniform sampler2D inputImageTexture; uniform float sharpness; varying vec2 textureCoordinate; varying vec2 vLeftTexCoord; varying vec2 vRightTexCoord; varying vec2 vTopTexCoord; varying vec2 vBottomTexCoord; void main() { vec4 centerColor = texture2D(inputImageTexture, textureCoordinate); vec3 leftColor = texture2D(inputImageTexture, vLeftTexCoord).rgb; vec3 rightColor = texture2D(inputImageTexture, vRightTexCoord).rgb; vec3 topColor = texture2D(inputImageTexture, vTopTexCoord).rgb; vec3 bottomColor = texture2D(inputImageTexture, vBottomTexCoord).rgb; // 计算周围像素的平均值贡献 // 锐化公式:Result = Center + sharpness * (Center - Average(Surrounding)) vec3 sharpenedColor = centerColor.rgb * (1.0 + 4.0 * sharpness) - (leftColor + rightColor + topColor + bottomColor) * sharpness; gl_FragColor = vec4(sharpenedColor, centerColor.a); })";std::shared_ptr<SharpenFilter>SharpenFilter::Create(){autoret=std::shared_ptr<SharpenFilter>(newSharpenFilter());gpupixel::GPUPixelContext::GetInstance()->SyncRunWithContext([&]{if(ret&&!ret->Init()){ret.reset();}});returnret;}boolSharpenFilter::Init(){if(!InitWithFragmentShaderString(kSharpenFragmentShaderString)){returnfalse;}sharpness_=0.5;// 默认中等锐化RegisterProperty("sharpness",sharpness_,"The sharpness adjustment to apply (0.0 - 4.0)",[this](float&sharpness){setSharpness(sharpness);});returntrue;}voidSharpenFilter::setSharpness(floatsharpness){sharpness_=sharpness;}boolSharpenFilter::DoRender(boolupdateSinks){filter_program_->SetUniformValue("sharpness",sharpness_);returnNearbySampling3x3Filter::DoRender(updateSinks);}}// namespace gpupixel

修改CMakeLists.txt

在 common_source_files 列表的 filter 部分(建议放在 toon_filter.cc 附近),添加你的新文件路径:

# ... 前面的文件 ...${CMAKE_CURRENT_SOURCE_DIR}/filter/toon_filter.cc${CMAKE_CURRENT_SOURCE_DIR}/filter/sharpen_filter.cc# <--- 添加这一行${CMAKE_CURRENT_SOURCE_DIR}/filter/pixellation_filter.cc# ... 后面的文件 ...

为了保持项目整洁,在下方的 public_filter_header_files 列表中也添加对应的 .h 文件:

# ...${PROJECT_SOURCE_DIR}/include/gpupixel/filter/toon_filter.h${PROJECT_SOURCE_DIR}/include/gpupixel/filter/sharpen_filter.h# <--- 添加这一行${PROJECT_SOURCE_DIR}/include/gpupixel/filter/contrast_filter.h# ...

参考

https://github.com/pixpark/gpupixel

http://www.jsqmd.com/news/502800/

相关文章:

  • DeOldify图像上色服务5分钟快速部署:零基础搭建黑白照片修复工具
  • Nanbeige4.1-3B链路监控教程:Prometheus+Grafana监控vLLM服务指标
  • 普通人无条件前程似锦的庖丁解牛
  • Qwen3-ForcedAligner在语音旅游中的应用:实时翻译与导览
  • uniapp 实现高性能固定表头与固定列的表格组件
  • 手把手教你用Docker部署Firecrawl:解决Rust版本错误和Go模块下载超时问题
  • 普通人无条件家和万事兴的庖丁解牛
  • 广州传统养生调理馆推荐|告别痛症,选对馆才有效 - 妙妙水侠
  • buildroot的网络配置
  • 【最新】2026年3月OpenClaw(Clawdbot)华为云2分钟超简单部署步骤
  • Solution - P8903 [USACO22DEC] Bribing Friends G
  • OpenClaw+Qwen3-32B自动化办公:飞书机器人配置全流程
  • MCP中台建设
  • 5分钟搞懂多机器人路径规划(MAPF):从仓储物流到无人机编队的实战应用
  • foobox-cn终极方案:专业级foobar2000深度定制与界面美化完全指南
  • GME多模态向量-Qwen2-VL-2B快速上手:Python入门级多模态API调用
  • 【超详细】2026年3月OpenClaw(Clawdbot)本地8分钟超简单集成流程
  • Vercel+Railway+Zeabur多平台部署Typecho动态博客实战指南(附避坑技巧)
  • Altium Designer 22 丝印层精准避让焊盘过孔实战指南
  • 重塑个人任务管理:My-TODOs赋能高效生活新方式
  • 智能体落地:先搭框架,再填功能
  • 华能伊敏露天矿:矿用卡车无人化关键技术研究与示范应用落地
  • Anaconda环境管理:为SenseVoice-Small模型调用创建独立的Python虚拟环境
  • AI Agent 架构图解:大模型、记忆、RAG 与工具调用的协同机制
  • 截止到 2026-3 自动驾驶开源算法中 哪个算法最强
  • OpenClaw多模型路由策略:GLM-4.7-Flash与轻量模型智能切换
  • AI 大模型重构教育!2026 学习机推荐,下一代是智能学习 - 速递信息
  • 2026年极萌水光仪深度解析:基于效果与口碑的市场评价分析 - 外贸老黄
  • 广州海珠区靠谱养生馆推荐,避开坑选对调理机构 - 妙妙水侠
  • 齐次坐标与变换矩阵在计算机图形学中的应用