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

运行结果

相关推荐
明月_清风6 小时前
AI 越来越强,程序员真正的价值到底是什么?
人工智能·后端
m0_466525296 小时前
云从科技上线云起ModelHub:AI团队时代的模型算力基础设施
大数据·人工智能·科技
火山引擎开发者社区6 小时前
OpenViking:给 Codex 加上长期记忆
人工智能
荆棘鸟智能7 小时前
城市感知设备怎么统一接入?从多协议网关到设备模型的中间件架构设计
人工智能·算法·边缘计算
火山引擎开发者社区7 小时前
当 AI 内容真假难辨,谁来为真实签名 —— 证书中心 C2PA 内容可信溯源服务正式发布
人工智能
百万蹄蹄向前冲7 小时前
风扇转了一晚上MVP专家团翻车事故
前端·人工智能
米小虾7 小时前
你的 harness 技巧有保质期:176 组对照实验显示,上下文管理的收益从 35.7 分跌到 2.7 分
人工智能·agent
飞哥数智坊7 小时前
一个周末,6个项目,我第一次感觉 AI 编程真的进入了新阶段
人工智能·ai编程
AOI小白新手上路7 小时前
秦方方 2025《基于深度学习的单幅图像去雨算法研究与应用》( 河南理工硕士论文)蒸馏文档
人工智能
米小虾7 小时前
一周 AI 观察(9.15–9.21):同一个星期里,token 有了官方标准,Gemini 进了三家真实公司,TPU 变成了抵押品
人工智能