OpenCV图像滤波(Image Filtering)常用函数及其用法详解

2024-08-23 05:44

本文主要是介绍OpenCV图像滤波(Image Filtering)常用函数及其用法详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        在设计信号调理电路时通常得设计滤波电路,滤波电路的作用一般时过滤掉噪声或者不需要的信号。在做图像处理时,也会遇到图像噪声问题,如椒盐噪声。有时需要将图像噪声处理掉,这就是所说的图像滤波。OpenCV有多个图像滤波函数,常用的有:boxFilter,filter2D,blur,bilateralFilter,GaussianBlur,medianBlur。图像滤波的实质是通过卷积运算使得图像平滑(Smooth),同时也会使图像变得更模糊(blur),有时图像滤波又被叫做图像模糊.下面逐一介绍这几个函数及其用法。

        boxFilter函数

        boxfilter函数的原型如下:

 这个函数使图像平滑(Smooth)使用这样的核:

这里

boxfilter函数参数:

        src 输入图像

        dst 输出图像(与输入图像同样类型,同样大小)

        ddepth 输出图像深度(-1表示与输入图像相同的图像深度)

        ksize  模糊处理所用核的大小

        anchor 锚点((-1,-1)代表锚点为核的中心)

        normalize  指定内核是否按其区域归一化的标志。

        borderType  用于推断图像外部的像素的边框模式.有一下几种,红框中的模式不支持.

boxfilter 应用场景

  • 图像平滑boxFilter可以用于平滑图像,减少图像中的噪声和细节,使得图像看起来更加柔和。这在一些需要降低图像复杂度的应用中非常有用,如图像预处理、特征提取等。

  • 图像去噪:通过平滑处理,boxFilter可以有效地去除图像中的随机噪声,尤其是那些分布在图像各个区域的均匀噪声。然而,左对齐对于椒盐噪声等非均匀分布的噪声,可能需要采用其他去噪方法。

  • 图像预处理:在进行图像分割、边缘检测等高级图像处理任务之前,通常需要对图像进行预处理,以减少噪声和细节对处理结果的影响。boxFilter可以作为这种预处理步骤之一。

  • 特征提取:在一些特征提取算法中,如Haar特征提取,boxFilter可以用于计算图像区域的积分特性,进而提取出有用的特征信息。

  • 计算图像的其他统计特性:通过调整normalize参数和边界处理方式,boxFilter还可以用于计算图像的其他统计特性,如方差、协方差等,为后续的图像处理和分析提供有用的信息。

用法示例     

         下面以一个实例来演示其用法,新建一个控制台程序,其代码如下:

#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{//std::cout << "Hello World!\n";Mat src = imread("1.webp");if (src.empty()){cout << "Cann't open image!" << endl;return -1;}imshow("Src", src);Mat dst;boxFilter(src, dst, -1, Size(3, 3), Point(-1, 1), true, BORDER_DEFAULT);imshow("Dst", dst);waitKey(0);return 0;
}

看下试运行效果。试运行,结果如下:

可以看出,平滑程度略有改善,结果并不明显。 

如果将mormolize选项设为false,结果又会如何?修改代码如下:

#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{//std::cout << "Hello World!\n";Mat src = imread("1.webp");if (src.empty()){cout << "Cann't open image!" << endl;return -1;}imshow("Src", src);Mat dst;//boxFilter(src, dst, -1, Size(3, 3), Point(-1, 1), true, BORDER_DEFAULT);boxFilter(src, dst, -1, Size(3, 3), Point(-1, 1), false, BORDER_DEFAULT);imshow("Dst", dst);waitKey(0);return 0;
}

   试运行,结果如下:

           说明将mormolize选项设为false,将会导致运算溢出。

如果不改变核的大小,改变boxfilter的次数结果会如何?修改代码如下:

#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{//std::cout << "Hello World!\n";Mat src = imread("1.webp");if (src.empty()){cout << "Cann't open image!" << endl;return -1;}imshow("Src", src);Mat dst;//boxFilter(src, dst, -1, Size(3, 3), Point(-1, 1), true, BORDER_DEFAULT);//boxFilter(src, dst, -1, Size(3, 3), Point(-1, 1), false, BORDER_DEFAULT);for (int i = 0; i < 100; i++){boxFilter(src, dst, -1, Size(3, 3), Point(-1, 1), true, BORDER_DEFAULT);}imshow("Dst", dst);waitKey(0);return 0;
}

试运行,结果如下:

 可以看出,如果不改变核的大小,增加boxFilter的次数,不会明显改变图像的平滑效果。

下面改变核的大小,修改代码如下:

#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{//std::cout << "Hello World!\n";Mat src = imread("1.webp");if (src.empty()){cout << "Cann't open image!" << endl;return -1;}imshow("Src", src);Mat dst;//boxFilter(src, dst, -1, Size(3, 3), Point(-1, 1), true, BORDER_DEFAULT);//boxFilter(src, dst, -1, Size(3, 3), Point(-1, 1), false, BORDER_DEFAULT);/*for (int i = 0; i < 100; i++){boxFilter(src, dst, -1, Size(3, 3), Point(-1, 1), true, BORDER_DEFAULT);}*/boxFilter(src, dst, -1, Size(11, 11), Point(-1, 1), true, BORDER_DEFAULT);imshow("Dst", dst);waitKey(0);return 0;
}

试运行,结果如下:

可以看出,增大核的size可明显改善平滑效果。

        filter2D函数

        filter2D函数的原型如下:

该函数用卷积核对图像进行卷积运算。将任意线性滤波器应用于图像。支持就地操作。当孔径部分位于图像之外时,该函数根据指定的边界模式插值异常像素值。该函数实际上计算相关性,而不是卷积:

ilter2D函数的参数:

        src 输入图像

        dst输出图像

        kernel 用以运算的核

        anchor 卷积核的锚点,缺省值是Point(-1,1),卷积核的中心。

        delta  在将过滤像素存储到 dst 之前添加到过滤像素的可选值

        borderType 像素外推法。与boxfilter的一致。

OpenCV的filter2D函数是一个非常强大的工具,它允许你对图像应用自定义的卷积核(kernel)。这个函数在图像处理中非常有用,因为它可以实现多种效果,比如模糊、锐化、边缘检测等。

        用法示例

        图像平滑 实现均值模糊修改上面的代码如下:

#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{//std::cout << "Hello World!\n";Mat src = imread("1.webp");if (src.empty()){cout << "Cann't open image!" << endl;return -1;}imshow("Src", src);Mat dst;/**************boxFilter//boxFilter(src, dst, -1, Size(3, 3), Point(-1, 1), true, BORDER_DEFAULT);//boxFilter(src, dst, -1, Size(3, 3), Point(-1, 1), false, BORDER_DEFAULT);for (int i = 0; i < 100; i++){boxFilter(src, dst, -1, Size(3, 3), Point(-1, 1), true, BORDER_DEFAULT);}boxFilter(src, dst, -1, Size(11, 11), Point(-1, 1), true, BORDER_DEFAULT);*///filter2D//blurfloat ftem = 0.021;Mat kernel = (Mat_<float>(7, 7) << ftem, ftem, ftem, ftem, ftem, ftem, ftem,ftem, ftem, ftem, ftem, ftem, ftem, ftem,ftem, ftem, ftem, ftem, ftem, ftem, ftem,ftem, ftem, ftem, ftem, ftem, ftem, ftem,ftem, ftem, ftem, ftem, ftem, ftem, ftem,ftem, ftem, ftem, ftem, ftem, ftem, ftem,ftem, ftem, ftem, ftem, ftem, ftem, ftem);filter2D(src, dst, -1, kernel);imshow("Dst", dst);waitKey(0);return 0;
}

试运行,结果如下:

可以看到有平滑效果。

        图像锐化(Sharpening)修改代码如下:

#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{//std::cout << "Hello World!\n";Mat src = imread("1.webp");if (src.empty()){cout << "Cann't open image!" << endl;return -1;}imshow("Src", src);Mat dst;/**************boxFilter//boxFilter(src, dst, -1, Size(3, 3), Point(-1, 1), true, BORDER_DEFAULT);//boxFilter(src, dst, -1, Size(3, 3), Point(-1, 1), false, BORDER_DEFAULT);for (int i = 0; i < 100; i++){boxFilter(src, dst, -1, Size(3, 3), Point(-1, 1), true, BORDER_DEFAULT);}boxFilter(src, dst, -1, Size(11, 11), Point(-1, 1), true, BORDER_DEFAULT);*///filter2D//Averaging Blur/*float ftem = 0.05;Mat kernel = (Mat_<float>(7, 7) << ftem, -ftem, ftem, ftem, ftem, -ftem, ftem,-ftem, ftem, ftem, ftem, ftem, ftem, -ftem,ftem, -ftem, ftem, ftem, ftem, -ftem, ftem,-ftem, ftem, ftem, ftem, ftem, ftem, -ftem,ftem, -ftem, ftem, ftem, ftem, -ftem, ftem,-ftem, ftem, ftem, ftem, ftem, ftem, -ftem,ftem, -ftem, ftem, ftem, ftem, -ftem, ftem);filter2D(src, dst, -1, kernel);imshow("Dst", dst);*///sharpingMat kernel = (Mat_<float>(3, 3) <<-1, -1, -1,-1, 9, -1,-1, -1, -1);filter2D(src, dst, -1, kernel);imshow("Dst", dst);waitKey(0);return 0;
}

试运行,结果如下:

Sobel边缘检测

修改上面的店面如下:

#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{//std::cout << "Hello World!\n";Mat src = imread("1.webp");if (src.empty()){cout << "Cann't open image!" << endl;return -1;}imshow("Src", src);Mat dst;/**************boxFilter//boxFilter(src, dst, -1, Size(3, 3), Point(-1, 1), true, BORDER_DEFAULT);//boxFilter(src, dst, -1, Size(3, 3), Point(-1, 1), false, BORDER_DEFAULT);for (int i = 0; i < 100; i++){boxFilter(src, dst, -1, Size(3, 3), Point(-1, 1), true, BORDER_DEFAULT);}boxFilter(src, dst, -1, Size(11, 11), Point(-1, 1), true, BORDER_DEFAULT);*///filter2D//Averaging Blur/*float ftem = 0.05;Mat kernel = (Mat_<float>(7, 7) << ftem, -ftem, ftem, ftem, ftem, -ftem, ftem,-ftem, ftem, ftem, ftem, ftem, ftem, -ftem,ftem, -ftem, ftem, ftem, ftem, -ftem, ftem,-ftem, ftem, ftem, ftem, ftem, ftem, -ftem,ftem, -ftem, ftem, ftem, ftem, -ftem, ftem,-ftem, ftem, ftem, ftem, ftem, ftem, -ftem,ftem, -ftem, ftem, ftem, ftem, -ftem, ftem);filter2D(src, dst, -1, kernel);imshow("Dst", dst);*//*//sharpingMat kernel = (Mat_<float>(3, 3) <<-1, -1, -1,-1, 9, -1,-1, -1, -1);filter2D(src, dst, -1, kernel);imshow("Dst", dst);*///Sobel边缘检测Mat sobelX = (Mat_<float>(3, 3) <<-1, 0, 1,-2, 0, 2,-1, 0, 1);Mat sobelY = (Mat_<float>(3, 3) <<-1, -2, -1,0, 0, 0,1, 2, 1);Mat dstx, dsty;filter2D(src, dstx, -1, sobelX);filter2D(src, dsty, -1, sobelY);addWeighted(dstx, 0.5, dsty, 0.5, 0, dst);imshow("Dst", dst);waitKey(0);return 0;
}

试运行,结果如下:

Laplacian边缘检测

修改上面代码如下:

#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{//std::cout << "Hello World!\n";Mat src = imread("1.webp");if (src.empty()){cout << "Cann't open image!" << endl;return -1;}imshow("Src", src);Mat dst;/**************boxFilter//boxFilter(src, dst, -1, Size(3, 3), Point(-1, 1), true, BORDER_DEFAULT);//boxFilter(src, dst, -1, Size(3, 3), Point(-1, 1), false, BORDER_DEFAULT);for (int i = 0; i < 100; i++){boxFilter(src, dst, -1, Size(3, 3), Point(-1, 1), true, BORDER_DEFAULT);}boxFilter(src, dst, -1, Size(11, 11), Point(-1, 1), true, BORDER_DEFAULT);*///filter2D//Averaging Blur/*float ftem = 0.05;Mat kernel = (Mat_<float>(7, 7) << ftem, -ftem, ftem, ftem, ftem, -ftem, ftem,-ftem, ftem, ftem, ftem, ftem, ftem, -ftem,ftem, -ftem, ftem, ftem, ftem, -ftem, ftem,-ftem, ftem, ftem, ftem, ftem, ftem, -ftem,ftem, -ftem, ftem, ftem, ftem, -ftem, ftem,-ftem, ftem, ftem, ftem, ftem, ftem, -ftem,ftem, -ftem, ftem, ftem, ftem, -ftem, ftem);filter2D(src, dst, -1, kernel);imshow("Dst", dst);*///sharping/*Mat kernel = (Mat_<float>(3, 3) <<-1, -1, -1,-1, 9, -1,-1, -1, -1);filter2D(src, dst, -1, kernel);imshow("Dst", dst);*///Sobel边缘检测/*Mat sobelX = (Mat_<float>(3, 3) <<-1, 0, 1,-2, 0, 2,-1, 0, 1);Mat sobelY = (Mat_<float>(3, 3) <<-1, -2, -1,0, 0, 0,1, 2, 1);Mat dstx, dsty;filter2D(src, dstx, -1, sobelX);filter2D(src, dsty, -1, sobelY);addWeighted(dstx, 0.5, dsty, 0.5, 0, dst);imshow("Dst", dst);*///Laplacian边缘检测Mat laplacian = (cv::Mat_<float>(3, 3) <<0, -1, 0,-1, 4, -1,0, -1, 0);filter2D(src, dst, -1, laplacian);imshow("Dst", dst);waitKey(0);return 0;
}

试运行,结果如下:

        浮雕(Embossing)效果

        修改上面代码如下:

#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{//std::cout << "Hello World!\n";Mat src = imread("1.webp");if (src.empty()){cout << "Cann't open image!" << endl;return -1;}imshow("Src", src);Mat dst;/**************boxFilter//boxFilter(src, dst, -1, Size(3, 3), Point(-1, 1), true, BORDER_DEFAULT);//boxFilter(src, dst, -1, Size(3, 3), Point(-1, 1), false, BORDER_DEFAULT);for (int i = 0; i < 100; i++){boxFilter(src, dst, -1, Size(3, 3), Point(-1, 1), true, BORDER_DEFAULT);}boxFilter(src, dst, -1, Size(11, 11), Point(-1, 1), true, BORDER_DEFAULT);*///filter2D//Averaging Blur/*float ftem = 0.05;Mat kernel = (Mat_<float>(7, 7) << ftem, -ftem, ftem, ftem, ftem, -ftem, ftem,-ftem, ftem, ftem, ftem, ftem, ftem, -ftem,ftem, -ftem, ftem, ftem, ftem, -ftem, ftem,-ftem, ftem, ftem, ftem, ftem, ftem, -ftem,ftem, -ftem, ftem, ftem, ftem, -ftem, ftem,-ftem, ftem, ftem, ftem, ftem, ftem, -ftem,ftem, -ftem, ftem, ftem, ftem, -ftem, ftem);filter2D(src, dst, -1, kernel);imshow("Dst", dst);*///sharping/*Mat kernel = (Mat_<float>(3, 3) <<-1, -1, -1,-1, 9, -1,-1, -1, -1);filter2D(src, dst, -1, kernel);imshow("Dst", dst);*///Sobel边缘检测/*Mat sobelX = (Mat_<float>(3, 3) <<-1, 0, 1,-2, 0, 2,-1, 0, 1);Mat sobelY = (Mat_<float>(3, 3) <<-1, -2, -1,0, 0, 0,1, 2, 1);Mat dstx, dsty;filter2D(src, dstx, -1, sobelX);filter2D(src, dsty, -1, sobelY);addWeighted(dstx, 0.5, dsty, 0.5, 0, dst);imshow("Dst", dst);*///Laplacian边缘检测/*Mat laplacian = (cv::Mat_<float>(3, 3) <<0, -1, 0,-1, 4, -1,0, -1, 0);filter2D(src, dst, -1, laplacian);imshow("Dst", dst);*///Mat emboss = (cv::Mat_<float>(3, 3) <<-2, -1, 0,-1, 1, 1,0, 1, 2);filter2D(src, dst, -1, emboss);imshow("Dst", dst);waitKey(0);return 0;
}

试运行,结果如下:

blur函数

        blur函数原型如下:

blur函数实际上是将normalize变量设为true的boxFilter,这里就不再做介绍了。

        用法示例

        修改上面的代码如下(以后只列出修改部分,相同部分不再列出):

//blur函数blur(src, dst, Size(9,9));imshow("Dst", dst);waitKey(0);return 0;
}

试运行,结果如下:

 

bilateralFilter 函数

        bilateralFilter 函数的原型如下:

        双边滤波器可以很好地减少不需要的噪声,同时保持边缘相当清晰。然而,与大多数过滤器相比,它的速度非常慢。

        西格玛值:为简单起见,您可以将 2 个西格玛值设置为相同。如果它们很小(< 10),过滤器不会有太大的效果,而如果它们很大(> 150),它们将产生非常强的效果,使图像看起来“卡通”​​。

        滤波器大小:大型滤波器(d > 5)非常慢,因此建议对于实时应用程序使用 d=5,对于需要重度噪声过滤的离线应用程序可能使用 d=9。

        bilateralFilter 函数参数:

                src 源图像, 8 位或浮点、1 通道或 3 通道图像。

                dst 与 src 具有相同大小和类型的目标图像。

                d   过滤期间使用的每个像素邻域的直径。如果它是非正数,则根据 sigmaSpace 计算。

                sigmaColor 过滤颜色空间中的西格玛。参数值越大,意味着像素邻域内越远的颜色(参                                     见 sigmaSpace)将混合在一起,从而产生更大的半相等颜色区域。

                sigmaSpace 在坐标空间中过滤 sigma。参数值越大,意味着越远的像素只要颜色足够                                          接近,就会相互影响(参见 sigmaColor )。当 d>0 时,它指定邻域大                                            小,而与 sigmaSpace 无关。否则,d 与 sigmaSpace 成正比。

                borderType 边框模式用于推断图像外部的像素。

        用法示例

        修改上面代码如下:

	// bilateralFilterbilateralFilter(src, dst, 7, 75, 75);imshow("Dst", dst);waitKey(0);return 0;
}

试运行,结果如下:

GaussianBlur函数

        GaussianBlur函数的原型如下:

该函数将源图像与指定的高斯核进行卷积。支持就地过滤。

GaussianBlur函数参数:

        src 输入图像;图像可以有任意数量的通道,这些通道是独立处理的,但深度应该是                 CV_8U、CV_16U、CV_16S、CV_32F 或 CV_64F。

        dst 与 src 具有相同大小和类型的输出图像

        ksize 高斯核大小。 ksize.width 和 ksize.height 可以不同,但​​它们都必须为正数且为奇数或                     者,它们可以为零,然后根据西格玛计算它们。

        sigmaX X方向高斯核标准偏差

        sigmaY Y方向高斯核标准偏差;如果sigmaY为零,则将其设置为等于sigmaX,如果两个                             sigma都为零,它们分别根据ksize.width和ksize.height计算(详见                                                   getGaussianKernel);为了完全控制结果,而不管未来可能对所有这些语义进行的                       修改,建议指定所有ksize、sigmaX和sigmaY。

        borderType 边框模式用于推断图像外部的像素。

  GaussianBlur函数通过高斯滤波器对图像进行模糊处理。高斯滤波器是一种线性平滑滤波器,其对于图像中的每一个像素点,都将其周围的像素值按照高斯分布进行加权平均,从而达到模糊图像的效果。这种方法在图像处理中非常有效,特别是在去除图像噪声和细节方面。

        用法示例

        修改上面的程序代码如下:

	//GaussianBlurGaussianBlur(src, dst, Size(9, 9),10,10);imshow("Dst", dst);waitKey(0);return 0;
}

        试运行,结果如下:

增大核或者增大sigmaX,sigmaY,都可增强模糊效果。

medianBlur函数

        medianBlur函数的原型如下:

        该函数使用ksize×ksize光圈的中值滤波器平滑图像。多通道图像的每个通道都是独立处理的。支持就地操作。

        medianBlur函数参数:

               src: 输入图像,可以是单通道或三通道的8位或浮点图像。然而,对于 medianBlur 来                            说,它主要被用于8位(CV_8U)的单通道或三通道图像。

               dst: 输出图像,与输入图像具有相同的类型和大小。

                ksize: 滤波器的大小,必须是正奇数。

        虽然 medianBlur 对于去除椒盐噪声非常有效,但它也可能导致图像细节的模糊,特别是当 ksize 值较大时。因此,在选择 ksize 时需要权衡去噪效果和图像细节保留之间的平衡。

      用法示例

     修改上面程序代码如下:

	//GaussianBlur/*GaussianBlur(src, dst, Size(9, 9),10,10);imshow("Dst", dst);*///medianBlurmedianBlur(src, dst, 5);imshow("Dst", dst);waitKey(0);return 0;
}

试运行,结果如下:

OpenCV 图像了滤波常用函数已经,介绍完毕。示例源代码已经上传到CSDN,如果需要可以去下载。链接为:https://download.csdn.net/download/billliu66/89649489

这篇关于OpenCV图像滤波(Image Filtering)常用函数及其用法详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1098510

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

Open3D 基于法线的双边滤波

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 输入参数: 输出参数: 参数影响: 2.2完整代码 三、实现效果 3.1原始点云 3.2滤波后点云 Open3D点云算法汇总及实战案例汇总的目录地址: Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博客 一、概述         基于法线的双边

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/