c++视觉处理-----Laplacian算 子

Laplacian算 子

cv::Laplacian 是 OpenCV 中的一个函数,用于应用Laplacian算子(拉普拉斯算子)在图像上进行边缘检测。以下是 cv::Laplacian 函数的基本用法:

cv::Laplacian(src, dst, ddepth, ksize, scale, delta, borderType);
  • src: 输入图像,通常是灰度图像(单通道)。
  • dst: 输出图像,用于存储Laplacian结果。
  • ddepth: 输出图像的深度,通常设置为 CV_16S
  • ksize: Laplacian核的大小,默认是3,通常用3x3核。
  • scale: 可选参数,结果的缩放因子,默认为1。
  • delta: 可选参数,可选的加法常量,默认为0。
  • borderType: 可选参数,用于处理图像边界的方式,默认是 cv::BORDER_DEFAULT

cv::Laplacian 函数会将Laplacian算子应用于输入图像 src,并将结果存储在 dst 中,以便进行边缘检测。通常,您需要将输入图像转换为灰度图像,因为Laplacian算子通常用于单通道图像。

这个函数是OpenCV中图像处理的一部分,用于检测图像中的边缘和纹理信息。您可以根据需要调整参数以满足您的应用需求。

Laplacian算子来检测图像中的边缘

#include <opencv2/opencv.hpp>

int main() {
    // 读取图像
    cv::Mat image = cv::imread("your_image.jpg");

    if (image.empty()) {
        std::cerr << "无法加载图像" << std::endl;
        return -1;
    }

    // 转换为灰度图像
    cv::Mat grayImage;
    cv::cvtColor(image, grayImage, cv::COLOR_BGR2GRAY);

    // 应用Laplacian算子
    cv::Mat laplacianImage;
    cv::Laplacian(grayImage, laplacianImage, CV_16S);
    cv::convertScaleAbs(laplacianImage, laplacianImage);

    // 显示结果
    cv::imshow("原始图像", image);
    cv::imshow("Laplacian结果", laplacianImage);

    cv::waitKey(0);
    return 0;
}

在这里插入图片描述

使用本地相机实时Laplacian算 子

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

// 回调函数,用于处理滑动块的变化
void onTrackbar(int threshold, void* userData) {
    cv::Mat frame;
    cv::VideoCapture cap(0); // 打开本地相机(通常是0号摄像头)

    if (!cap.isOpened()) {
        std::cerr << "无法打开相机" << std::endl;
        return;
    }

    while (true) {
        cap >> frame; // 从相机捕获一帧图像

        // 转换为灰度图像
        cv::Mat grayImage;
        cv::cvtColor(frame, grayImage, cv::COLOR_BGR2GRAY);

        // 应用Laplacian算子
        cv::Mat laplacianImage;
        cv::Laplacian(grayImage, laplacianImage, CV_16S);
        cv::convertScaleAbs(laplacianImage, laplacianImage);

        // 显示结果
        cv::imshow("实时Laplacian", laplacianImage);

        // 等待用户按下ESC键,然后退出循环
        if (cv::waitKey(1) == 27) {
            break;
        }
    }
}

int main() {
    cv::namedWindow("实时Laplacian");
    int initialThreshold = 3;
    int maxThreshold = 30;
    cv::createTrackbar("阈值", "实时Laplacian", &initialThreshold, maxThreshold, onTrackbar);
    
    onTrackbar(initialThreshold, nullptr); // 初始化

    cv::waitKey(0); // 等待用户按下任意键退出
    return 0;
}

Laplacian算 子特征提取

#include <opencv2/opencv.hpp>

int main() {
    // 读取图像
    cv::Mat image = cv::imread("your_image.jpg", cv::IMREAD_GRAYSCALE); // 转为灰度图像

    if (image.empty()) {
        std::cerr << "无法加载图像" << std::endl;
        return -1;
    }

    // 应用Laplacian算子
    cv::Mat laplacianImage;
    cv::Laplacian(image, laplacianImage, CV_16S);

    // 将结果转换为正数
    cv::Mat laplacianAbs;
    cv::convertScaleAbs(laplacianImage, laplacianAbs);

    // 二值化处理以提取边缘特征
    cv::Mat binaryImage;
    cv::threshold(laplacianAbs, binaryImage, 30, 255, cv::THRESH_BINARY);

    // 显示结果
    cv::imshow("原始图像", image);
    cv::imshow("Laplacian结果", laplacianAbs);
    cv::imshow("边缘特征", binaryImage);

    cv::waitKey(0);
    return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枭玉龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值