将图像的锯齿状边缘变得平滑的方法

news/2024/7/21 7:52:05 标签: opencv, 计算机视觉, 图像处理

项目背景

使用PaddleSeg 192x192 模型分割出来的目标有锯齿状边缘,想通过传统算法将这种锯齿状边缘的变得平滑,虽然试了很过方法,但是效果还是不太理想

常用的集中方法

当使用分割算法(如分水岭分割、阈值分割等)分割出目标后,有几种方法可以将目标的锯齿状边缘变得平滑。以下是一些常用的方法:

  1. 双边滤波:如前面示例所示,双边滤波是一种能够平滑图像边缘并减少锯齿状边缘的有效方法。它同时考虑了空间信息和颜色信息,以确保平滑处理不会损失目标的边缘细节。

  2. 高斯滤波:高斯滤波是一种线性滤波方法,可以用来平滑图像。通过调整高斯滤波的内核大小和标准差,可以实现不同程度的平滑效果。较大的内核和较小的标准差通常会产生更平滑的结果。

  3. 中值滤波:中值滤波是一种非线性滤波方法,它用目标周围的像素值的中值来替代目标像素值。这种方法对于去除孤立的噪声和锯齿状边缘非常有效。

  4. 边缘保留滤波:边缘保留滤波(如基于导向滤波的方法)可以在保留图像边缘的同时,平滑非边缘区域。这种方法通常用于保留目标的细节。

通常,双边滤波是一种通用方法,可以保持边缘细节并减少锯齿状边缘,但你也可以尝试其他方法,以获得最适合你应用的效果。

opencv中实现的调用">OpenCV中实现的调用

  1. 双边滤波
#include <opencv2/opencv.hpp>

int main() {
    cv::Mat inputImage = cv::imread("input.jpg");
    cv::Mat smoothedImage;

    // 应用双边滤波
    cv::bilateralFilter(inputImage, smoothedImage, 9, 75, 75);

    cv::imshow("原始图像", inputImage);
    cv::imshow("双边滤波后的图像", smoothedImage);

    cv::waitKey(0);

    return 0;
}
  1. 高斯滤波
#include <opencv2/opencv.hpp>

int main() {
    cv::Mat inputImage = cv::imread("input.jpg");
    cv::Mat smoothedImage;

    // 应用高斯滤波
    cv::GaussianBlur(inputImage, smoothedImage, cv::Size(5, 5), 0);

    cv::imshow("原始图像", inputImage);
    cv::imshow("高斯滤波后的图像", smoothedImage);

    cv::waitKey(0);

    return 0;
}
  1. 中值滤波
#include <opencv2/opencv.hpp>

int main() {
    cv::Mat inputImage = cv::imread("input.jpg");
    cv::Mat smoothedImage;

    // 应用中值滤波
    cv::medianBlur(inputImage, smoothedImage, 5);

    cv::imshow("原始图像", inputImage);
    cv::imshow("中值滤波后的图像", smoothedImage);

    cv::waitKey(0);

    return 0;
}
  1. 边缘保留滤波
#include <opencv2/opencv.hpp>

int main() {
    cv::Mat inputImage = cv::imread("input.jpg");
    cv::Mat smoothedImage;

    // 创建一个导向滤波的导向图像
    cv::Mat guideImage;
    cv::cvtColor(inputImage, guideImage, cv::COLOR_BGR2GRAY);

    // 应用导向滤波
    cv::ximgproc::guidedFilter(guideImage, inputImage, smoothedImage, 10, 0.1);

    cv::imshow("原始图像", inputImage);
    cv::imshow("边缘保留滤波后的图像", smoothedImage);

    cv::waitKey(0);

    return 0;
}

请注意,示例中的图像处理函数和参数值可能需要根据你的具体应用和图像特性进行调整。确保你的OpenCV库已正确配置和链接到你的项目,以便编译和运行这些示例代码。


http://www.niftyadmin.cn/n/5140548.html

相关文章

主播直播美颜SDK:提升颜值的秘诀

当下&#xff0c;主播们往往依赖于主播直播美颜SDK&#xff0c;这个技术工具为他们提供了一个让自己看起来更好看的机会。本文将深入探讨主播直播美颜SDK的工作原理、应用和影响&#xff0c;揭示提升颜值的秘诀。 一、主播直播美颜SDK是什么&#xff1f; 主播直播美颜SDK是一…

kubectl详解

陈述式资源管理方法&#xff1a; 1.kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口 2.kubectl 是官方的CLI命令行工具&#xff0c;用于与 apiserver 进行通信&#xff0c;将用户在命令行输入的命令&#xff0c;组织并转化为 apiserver 能识别的信…

主动保存,只更改一个单元格数据,保存结果 result 为 nochange

原问题详情: 主动保存&#xff0c;只更改一个单元格数据&#xff0c;保存结果 result 为nochange&#xff0c;但是如果更改完数据后&#xff0c;失去焦点&#xff0c;再去主动保存&#xff0c;result的结果为 ok;这个问题怎么解决&#xff1f;感谢答疑&#xff0c;或者说有什么…

【C#】获得所有可见窗口信息

【背景】 由于自己的瘦客户端上的Windows自带截图软件功能被阉割&#xff0c;所以自己写了一个&#xff0c;其中有窗口截图功能&#xff0c;涉及到获得所有可见窗口的信息。 【代码】 public WindowInfo[] GetAllDesktopWindows(){//用来保存窗口对象 列表List<WindowInf…

图傅里叶变换

目录 什么是图信号&#xff1f; 如何理解图信号的”谱“&#xff1f; 图傅里叶变换是什么&#xff1f; 图傅里叶变换中特征值和图信号的总变差有什么关系&#xff1f; 让我们先总结一下&#xff0c;我们想要把图信号 正交分解到一组基 上&#xff1b; 那么怎么得到&#x…

Kubeadm高可用

目录 1、 环境准备 2、所有节点安装docker 3、所有节点安装kubeadm&#xff0c;kubelet和kubectl 4、部署 master 节点 高可用多 master 节点部署 master01&#xff08;2C/4G&#xff0c;cpu核心数要求大于2&#xff09; 192.168.80.20 master02&#xff08;2C/4G&…

Easy-Laser激光测平仪维修易激光对中仪E920

Easy-Laser激光对中仪常见故障&#xff1a;触摸屏损坏&#xff08;屏碎&#xff0c;不显示&#xff0c;黑屏&#xff0c;蓝屏&#xff0c;无背光等&#xff09;&#xff0c;对中仪电路板损坏&#xff0c;对中仪接收装置电路板&#xff0c;对中仪发射控制装置电路板等均可维修。…

实习答点。

计数单————>变成记录采购开单的记录表&#xff0c;实时的进行数据比较和统计。 具有&#xff1a; 采购前可以提供实时的数据比较&#xff0c;选择最合适的物品进行采购。 1.警戒库存 通过日期范围进行分析比较往年的采购量和库存量进行比较&#xff0c;进行判断今年的…