边缘检测器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