Canny邊緣檢測是一種流行的邊緣檢測算法,由John F. Canny在1986年開發(fā)。它是一種多階段過程,包括噪聲濾波、計(jì)算圖像強(qiáng)度的梯度、非最大值抑制以及雙閾值檢測。本文通過函數(shù)原型解讀和示例對(duì)cv::Canny()函數(shù)進(jìn)行詳解,以幫助大家理解和使用。
原理
Canny邊緣檢測的步驟如下:
(1)高斯濾波(噪聲濾波):使用高斯濾波器平滑圖像以減少噪聲。高斯濾波器是一種線性濾波器,可以消除圖像中的高頻噪聲。
(2)計(jì)算梯度強(qiáng)度和方向:計(jì)算圖像中每個(gè)像素的梯度強(qiáng)度和方向。梯度強(qiáng)度表示像素點(diǎn)處的邊緣強(qiáng)度,而梯度方向表示邊緣的方向。
(3)非最大值抑制:在計(jì)算梯度強(qiáng)度和方向后,非最大值抑制將抑制那些不是局部最大值的像素點(diǎn)。這意味著只有局部最大值的像素點(diǎn)才會(huì)被保留下來。
(4)雙閾值檢測:最后,雙閾值檢測用于檢測邊緣。這需要兩個(gè)閾值,通常稱為低閾值和高閾值。如果像素的梯度強(qiáng)度大于高閾值,則該像素被視為邊緣;如果像素的梯度強(qiáng)度在兩個(gè)閾值之間,則該像素被視為邊緣候選;如果像素的梯度強(qiáng)度低于低閾值,則該像素被視為非邊緣。
函數(shù)介紹
void cv::Canny(InputArray image, OutputArray edges, double lowThreshold, double highThreshold, int apertureSize = 3);
參數(shù)解釋:
image:輸入圖像,應(yīng)該是灰度圖像。
edges:輸出圖像,即檢測到的邊緣圖像。
lowThreshold:低閾值,用于雙閾值檢測。
highThreshold:高閾值,用于雙閾值檢測。
apertureSize:指定Sobel算子的大小,默認(rèn)為3。
運(yùn)行示例
設(shè)置閾值分別為50和150。
代碼如下:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main() {
Mat image = imread("ceshi.jpg", IMREAD_COLOR); // 讀取輸入圖像
if (image.empty()) {
cout << "Failed to read image." << endl;
return -1;
}
Mat gray_image; cvtColor(image, gray_image, COLOR_BGR2GRAY); // 轉(zhuǎn)換為灰度圖像
Mat edges_image;
// 應(yīng)用Canny邊緣檢測算法
Canny(gray_image, edges_image, 50, 150);
// 顯示結(jié)果圖像
imshow("Input", image);
imshow("Edges", edges_image);
imwrite("cnany.jpg", edges_image);
waitKey(0);
return 0;
}
在上面的示例中,我們首先讀取輸入圖像并將其轉(zhuǎn)換為灰度圖像。然后,我們使用Canny函數(shù)應(yīng)用Canny邊緣檢測算法,并指定兩個(gè)閾值(低閾值和高閾值)。最后,我們顯示原始圖像和檢測到的邊緣圖像。圖像對(duì)比如下所示。
上面為原圖,下面為邊緣檢測效果圖。文章來源:http://www.zghlxwxcb.cn/news/detail-767408.html
小結(jié)
選擇使用Canny函數(shù)進(jìn)行邊緣計(jì)算時(shí),應(yīng)根據(jù)項(xiàng)目需求和場景,設(shè)置合適的低閾值和高閾值參數(shù),以獲得最佳的邊緣檢測結(jié)果。較低的閾值可能會(huì)導(dǎo)致更多的邊緣被檢測到,而較高的閾值可能會(huì)導(dǎo)致較少的邊緣被檢測到。因此,選擇適當(dāng)?shù)拈撝凳鞘褂肅anny邊緣檢測函數(shù)的關(guān)鍵之一。文章來源地址http://www.zghlxwxcb.cn/news/detail-767408.html
到了這里,關(guān)于【C++】【Opencv】cv::Canny()邊緣檢測函數(shù)詳解和示例的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!