- 操作系統: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;
}