利用canny边缘检测,我们可以很好地得到哦一个图像的轮廓,下面是基于C++的,这是我们通过这段代码得到的结果:
#include "pch.h" #include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp>
using namespace cv; int main() { // 读入一张图片
Mat srcimage = imread("C://Users//lenovo//Desktop//456.jpg"); namedWindow("青春", 0);//创建窗口
cvResizeWindow("青春", 333, 500); //创建一个333*500大小的窗口
imshow("青春", srcimage);//在创建的窗口中显示图片
Mat dstimage,edge,grayimage; dstimage.create(srcimage.size(), srcimage.type()); cvtColor(srcimage, grayimage, CV_BGR2GRAY); cvtColor(srcimage, grayimage, COLOR_BGR2GRAY); blur(grayimage,edge,Size(17,17)); Canny(edge, edge, 3, 9, 3); // 等待6000 ms后窗口自动关闭
namedWindow("canny边缘检测", 0);//创建窗口
cvResizeWindow("canny边缘检测", 333, 500); //创建一个333*500大小的窗口
imshow("canny边缘检测", edge);//在创建的窗口中显示图片
waitKey(0);//等待按键按下
return 0;
演示例程: