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;
}

运行结果

相关推荐
张较瘦_1 小时前
[论文阅读] 人工智能 + 软件工程 | 需求获取访谈中LLM生成跟进问题研究:来龙去脉与创新突破
论文阅读·人工智能
一 铭2 小时前
AI领域新趋势:从提示(Prompt)工程到上下文(Context)工程
人工智能·语言模型·大模型·llm·prompt
顾道长生'3 小时前
(Arxiv-2025)通过动态 token 剔除实现无需训练的高效视频生成
计算机视觉·音视频·视频生成
麻雀无能为力6 小时前
CAU数据挖掘实验 表分析数据插件
人工智能·数据挖掘·中国农业大学
时序之心6 小时前
时空数据挖掘五大革新方向详解篇!
人工智能·数据挖掘·论文·时间序列
.30-06Springfield6 小时前
人工智能概念之七:集成学习思想(Bagging、Boosting、Stacking)
人工智能·算法·机器学习·集成学习
说私域7 小时前
基于开源AI智能名片链动2+1模式S2B2C商城小程序的超级文化符号构建路径研究
人工智能·小程序·开源
永洪科技7 小时前
永洪科技荣获商业智能品牌影响力奖,全力打造”AI+决策”引擎
大数据·人工智能·科技·数据分析·数据可视化·bi
shangyingying_18 小时前
关于小波降噪、小波增强、小波去雾的原理区分
人工智能·深度学习·计算机视觉
书玮嘎9 小时前
【WIP】【VLA&VLM——InternVL系列】
人工智能·深度学习