- 操作系统: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;
}
运行结果
