邊緣檢測器Canny
RGB圖
→
\rightarrow
→ 除噪
→
\rightarrow
→ Gray圖
→
\rightarrow
→ Canny邊緣檢測
此例中沒有進行除噪

#include <opencv2/opencv.hpp>
int main(int argc,char** argv) {
//實體化矩陣
cv::Mat img_rgb,img_gry,img_cny;
//創建視窗放置灰度圖
cv::namedWindow("Example_Gray",cv::WINDOW_AUTOSIZE);
//創建視窗放置邊緣檢測圖
cv::namedWindow("Example_Canny",cv::WINDOW_AUTOSIZE);
//讀取圖片
img_rgb=cv::imread(argv[1]);
//RGB轉灰度圖
cv::cvtColor(img_rgb,img_gry,cv::COLOR_BGR2GRAY);
//顯示灰度圖
cv::imshow("Example_Gray",img_gry);
//Canny邊緣檢測器
//param: InputArray,OutputArray,threshold1(低閾值),threshold2(高閾值),apertureSize(Sobel算子大小,主要用于獲得數字影像的一階梯度),L2gardient(指定計算梯度的等式. 當引數為 True 時,采用梯度計算公式(3)(4))
cv::Canny(img_gry,img_cny,10,100,3,true);
//顯示邊緣檢測圖
cv::imshow("Example_Canny",img_cny);
//等待鍵盤事件
cv::waitKey(0);
return 0;
}
終端中輸入
mkdir build
cd build
cmake ..
make
cd ..
./build/opencv_5 1130276.jpg


影像金字塔是一種經典的影像多尺寸描述方法,它將降采樣和平滑濾波結合在一起,對影像進行多尺度表示,影像金字塔由不同尺寸的影像疊加而成,通常每一層的尺寸都是上一層的一半,通常用于高效的影像分析,這種處理技術的意義在于:我們在對影像進行處理時,大多是要著眼于影像中有意義的部分,而同一幅影像中可能含有不同尺度下“有意義”的資訊,為了充分利用這些影像資訊,就需要對影像進行多尺度描述了,
縮小影像(或稱為下采樣(subsampled)或降采樣(downsampled))的主要目的有兩個:1、使得影像符合顯示區域的大小;2、生成對應影像的縮略圖
結合影像金字塔操作(兩次降采樣)后采用Canny邊緣檢測器

#include <opencv2/opencv.hpp>
int main(int argc,char** argv) {
//實體化矩陣
cv::Mat img_rgb,img_gry,img_cny,img_pyr,img_pyr2;
//創建視窗放置灰度圖
cv::namedWindow("Example_Gray",cv::WINDOW_AUTOSIZE);
//創建視窗放置邊緣檢測圖
cv::namedWindow("Example_Canny",cv::WINDOW_AUTOSIZE);
//讀取圖片
img_rgb=cv::imread(argv[1]);
//RGB轉灰度圖
cv::cvtColor(img_rgb,img_gry,cv::COLOR_BGR2GRAY);
//顯示灰度圖
cv::imshow("Example_Gray",img_gry);
//第一次降采樣
cv::pyrDown(img_gry,img_pyr);
//第二次降采樣
cv::pyrDown(img_pyr,img_pyr2);
//Canny邊緣檢測器
cv::Canny(img_pyr2,img_cny,10,100,3,true);
//顯示邊緣檢測圖
cv::imshow("Example_Canny",img_cny);
//等待鍵盤事件
cv::waitKey(0);
return 0;
}
終端中輸入
mkdir build
cd build
cmake ..
make
cd ..
./build/opencv_5 470111.jpg

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/301425.html
標籤:AI
