简单的二值边缘图像有两大缺陷:
①检测到的边缘过粗,难以实现物体的精确定位
②难以找到这样一个阈值足以检测到所有的重要边缘
Canny算子实现方法
#include <iostream>
#include <vector>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
int main()
{
// Read input image
cv::Mat image= cv::imread("road.jpg",0);
if (!image.data)
return 0;
// Display the image
cv::namedWindow("Original Image");
cv::imshow("Original Image",image);
// Apply Canny algorithm
cv::Mat contours;
cv::Canny(image,contours,125,350); //灰度图,输出轮廓,低阈值,高阈值
cv::namedWindow("1");
cv::imshow("1", contours);
cv::Mat contoursInv; //反转后的图像
cv::threshold(contours,contoursInv,128,255,cv::THRESH_BINARY_INV);//低于128,将变成255
cv::namedWindow("Canny Contours");
cv::imshow("Canny Contours",contoursInv);
cv::waitKey();
return 0;
}
结果: