OpenCV 图形API(61)图像特征检测------检测图像边缘的函数Canny()
- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
使用Canny算法在图像中查找边缘。
该函数在输入图像中查找边缘,并使用Canny算法在输出映射(edges)中标记它们。在边缘连接过程中,会使用threshold1和threshold2之间的较小值。而较大值则用于找到强烈边缘的初始段。详情请参见:Canny边缘检测器
cv::gapi::Canny 是 OpenCV 的 G-API 模块中用于检测图像边缘的函数。G-API 是 OpenCV 中的一个模块,它提供了一种新的方式来处理图像和视频流,通过定义图形操作然后在不同的后端上执行它们。
注意:
函数文本ID为"org.opencv.imgproc.feature.canny"
函数原型
GMat cv::gapi::Canny
(const GMat & image,double threshold1,double threshold2,int apertureSize = 3,bool L2gradient = false
)
参数
- 参数 image: 8位输入图像。
- 参数 threshold1: 滞后阈值法的第一个阈值。
- 参数 threshold2: 滞后阈值法的第二个阈值。
- 参数 apertureSize: 用于Sobel算子的孔径大小。
- 参数 L2gradient: 一个标志,指示是否应该使用更精确的L2范数 n o r m = ( d I / d x ) 2 + ( d I / d y ) 2 norm=\sqrt{(dI/dx)^2 + (dI/dy)^2} norm=(dI/dx)2+(dI/dy)2
来计算图像梯度幅度(当L2gradient=true时),或者默认的L1范数=|dI/dx|+|dI/dy|是否足够(当L2gradient=false时)。
代码示例
#include <opencv2/opencv.hpp>
#include <opencv2/gapi.hpp>
#include <opencv2/gapi/core.hpp> // 包含核心功能
#include <opencv2/gapi/imgproc.hpp> // 包含图像处理功能int main() {// 读取输入图像cv::Mat bgr_img = cv::imread("/media/dingxin/data/study/OpenCV/sources/images/Lenna.png");if (bgr_img.empty()) {std::cerr << "Error: Image not found!" << std::endl;return -1;}// 将BGR图像转换为灰度图像cv::Mat gray_img;cv::cvtColor(bgr_img, gray_img, cv::COLOR_BGR2GRAY);// 定义G-API图cv::GMat in;auto edges = cv::gapi::Canny(in, 50, 150, 3, false); cv::GComputation comp(cv::GIn(in), cv::GOut(edges));// 创建输出矩阵cv::Mat out_edges;// 应用计算图并执行边缘检测comp.apply(cv::gin(gray_img), cv::gout(out_edges),cv::compile_args(cv::gapi::kernels()));// 显示原始图像和边缘检测结果cv::imshow("Original Image", bgr_img);cv::imshow("Edges Detected", out_edges);cv::waitKey(0); // 等待按键return 0;
}