OpenCV图像滤波(10)Laplacian函数的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

功能描述

计算图像的拉普拉斯值。

该函数通过使用 Sobel 运算符计算出的 x 和 y 的二阶导数之和来计算源图像的拉普拉斯值:
dst = Δ src = ∂ 2 src ∂ x 2 + ∂ 2 src ∂ y 2 \texttt{dst} = \Delta \texttt{src} = \frac{\partial^2 \texttt{src}}{\partial x^2} + \frac{\partial^2 \texttt{src}}{\partial y^2} dst=Δsrc=x22src+y22src

当 ksize > 1 时,通过这种方式计算拉普拉斯值。当 ksize == 1 时,通过使用以下 3×3 掩模过滤图像来计算拉普拉斯值:
[ 0 1 0 1 − 4 1 0 1 0 ] (3) \left[ \begin{matrix} 0 & 1 & 0 \\ 1 & -4 & 1 \\ 0 & 1 & 0 \end{matrix} \right] \tag{3} 010141010 (3)

在图像处理和计算机视觉领域中,Laplacian 操作是一种常用的边缘检测方法。Laplacian 运算符是一种二阶导数算子,可以用来突出图像中的细节和边缘。在 OpenCV 中,cv::Laplacian() 函数用于计算图像的拉普拉斯算子

函数原型

void cv::Laplacian
(
	InputArray 	src,
	OutputArray 	dst,
	int 	ddepth,
	int 	ksize = 1,
	double 	scale = 1,
	double 	delta = 0,
	int 	borderType = BORDER_DEFAULT 
)		

参数

  • 参数src 源图像。
  • 参数dst 目标图像,与源图像具有相同的大小和通道数。
  • 参数ddepth 期望的目标图像深度,参见组合选项。
  • 参数ksize 用于计算二阶导数滤波器的孔径大小。详情请参阅 getDerivKernels。大小必须为正奇数。
  • 参数scale 计算得到的拉普拉斯值的可选缩放因子。默认情况下,不应用任何缩放。详情请参阅 getDerivKernels。
  • 参数delta 一个可选的增量值,在将结果存储到 dst 之前会加到结果上。
  • 参数borderType 像素外推方法,参见 BorderTypes。BORDER_WRAP 不被支持。

代码示例

#include <iostream>
#include <opencv2/opencv.hpp>

int main( int argc, char** argv )
{
    // 读取图像
    cv::Mat src = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/erik.jpg", cv::IMREAD_GRAYSCALE );
    if ( !src.data )
    {
        std::cout << "Error: Could not open or find the image." << std::endl;
        return -1;
    }

    cv::Size sz2Sh( 400, 600 );

    cv::resize( src, src, sz2Sh, 0, 0, cv::INTER_LINEAR_EXACT );
    // 定义目标图像
    cv::Mat dst;

    // 设置拉普拉斯算子参数
    int ddepth     = CV_16S;              // 目标图像的深度,这里使用16位整数
    int ksize      = 3;                   // 孔径大小,一般选择3或5
    double scale   = 1;                   // 缩放因子
    int delta      = 0;                   // 增量值
    int borderType = cv::BORDER_DEFAULT;  // 边界类型

    // 应用拉普拉斯算子
    cv::Laplacian( src, dst, ddepth, ksize, scale, delta, borderType );

    // 将结果转换回8位图像
    cv::convertScaleAbs( dst, dst );

    // 显示原图和拉普拉斯结果
    cv::namedWindow( "Original Image", cv::WINDOW_NORMAL );
    cv::imshow( "Original Image", src );

    cv::namedWindow( "Laplacian Result", cv::WINDOW_NORMAL );
    cv::imshow( "Laplacian Result", dst );

    // 等待用户按键
    cv::waitKey( 0 );

    return 0;
}

运行结果

在这里插入图片描述

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像滤波是一种用于对图像进行平滑处理或增强特定特征的技术。在OpenCV中,有多种图像滤波算法可供选择。其中一种常用的方法是方框滤波。方框滤波是一种快速而有效的线性滤波方法,可以用于求解邻域内像素的和、均值、方差等运算。 方框滤波的实现方式类似于积分图,但更快速。它的复杂度与邻域尺寸无关,因此在计算复杂度较高的操作时非常有用。方框滤波在均值滤波、引导滤波和计算Haar特征等领域都有广泛的应用。 另一种常用的图像滤波方法是使用Sobel、Scharr和Laplacian函数来计算图像的导数。Sobel和Scharr函数用于计算一阶导数,而Laplacian函数用于计算二阶导数。这些函数能够帮助我们检测图像中的边缘和特定特征。 要使用OpenCV进行图像滤波,首先需要加载图像,例如使用cv2.imread()函数。然后,可以使用Sobel、Scharr和Laplacian函数来计算图像的导数。最后,可以使用cv2.convertScaleAbs()函数将导数转换为无符号8位整数。接下来,可以使用cv2.addWeighted()函数将两个导数图像进行加权融合,以增强图像的特定特征。最后,使用cv2.imshow()函数来显示原始图像滤波后的图像使用cv2.waitKey()函数等待用户按下键盘上的任意键,然后使用cv2.destroyAllWindows()函数关闭所有窗口。 以上是一种通俗的解释,希望能帮助您理解OpenCV图像滤波的基本概念和使用方法。如有任何问题,请随时向我提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [OpenCV图像滤波算法总结(Python)](https://blog.csdn.net/SouthWooden/article/details/98203890)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [OpenCV图像滤波篇](https://blog.csdn.net/qq_42857680/article/details/131131319)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值