OpenCV计算摄影学(18)平滑图像中的纹理区域同时保留边缘信息函数textureFlattening()

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

cv::textureFlattening 是 OpenCV 中用于图像处理的一个函数,旨在平滑图像中的纹理区域,同时保留边缘信息。该技术特别适用于需要减少图像中噪声或不需要的细节,但又想保持重要特征(如边缘)的应用场景。

通过仅保留边缘位置处的梯度,然后与泊松求解器集成,可以清除选定区域的纹理,使其内容呈现平坦的外观。这里使用了Canny边缘检测器。

函数原型

cpp 复制代码
void cv::textureFlattening 	
(
	InputArray  	src,
	InputArray  	mask,
	OutputArray  	dst,
	float  	low_threshold = 30,
	float  	high_threshold = 45,
	int  	kernel_size = 3 
) 	

参数

  • 参数src 输入8位3通道图像。
  • 参数 mask 输入8位1或3通道图像。
  • 参数 dst 输出图像,与src具有相同的大小和类型。
  • 参数 low_threshold 范围从0到100。
  • 参数 high_threshold 值大于100。
  • 参数 kernel_size 使用的Sobel核的大小。

代码示例

cpp 复制代码
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main()
{
    // 加载输入图像
    Mat src = imread( "/media/dingxin/data/study/OpenCV/sources/images/jiangnan.jpg" );
    if ( src.empty() )
    {
        cout << "无法加载图像,请检查文件名和路径。\n";
        return -1;
    }

    // 创建一个掩模,选择整个图像进行处理
    Mat mask = Mat::ones( src.size(), CV_8UC1 ) * 255;

    // 输出图像
    Mat dst;

    // 应用纹理平整化
    textureFlattening( src, mask, dst );

    // 显示结果
    imshow( "Original Image", src );
    imshow( "Processed Image", dst );
    waitKey( 0 );

    return 0;
}

运行结果

相关推荐
不吃辣4901 分钟前
vibe coding | 如何做一个 AI 音乐生成工具?
java·人工智能·后端·ai·ai编程
文人sec4 分钟前
从接口压测到全链路质量保障:AI智能客服系统的软件测试实践
人工智能
声讯电子5 分钟前
实测A-59F音频模组:降噪稳、不啸叫、通话清晰
人工智能·语音识别·ai降噪·usb接口·回音消除
神奇霸王龙9 分钟前
2026旗舰六阶段MCP流水线实战指南
人工智能·ai·ai作画·prompt·aigc·mcp
山河不见老12 分钟前
【Cursor 、Qoder安装问题】Cursor 、Qoder安装卡在“正在准备安装”问题排查及解决
人工智能·windows·编辑器
新知图书12 分钟前
2.3 开发工作流
人工智能·agent·ai agent·智能体
tuanxiang14 分钟前
用免费 AI 改写工具处理批量文案的踩坑记录,附完整降噪脚本
人工智能
小邓的技术笔记15 分钟前
DeepSeek 大模型落地应用与场景实战指南
大数据·人工智能
石榴21 分钟前
从 Codex + Obsidian 到本地 RAG:我的私人知识库实践
人工智能
QZSJTR25 分钟前
技术解析|从SEO到GEO:生成式搜索时代实体企业数字化适配方案
人工智能