参考了许多博客,自己整理了一下几种方法用来提取图像轮廓的方法,记录一下
#include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>
#include<iostream>
using namespace cv;
using namespace std;
//方法1
void Contours1(Mat &image)
{
//将image由彩色图像转换成灰度图像
cvtColor(image,image,CV_BGR2GRAY);
//再通过阈值函数将其转换为二值图像
threshold(image,image,160,255,THRESH_BINARY);//设置阈值为160,最大像素值为255
vector<vector<Point>> contours;
//find轮廓
findContours(image,contours,1,CHAIN_APPROX_SIMPLE);
//draw轮廓
Mat result=Mat::zeros(image.size(),CV_8UC1);
if(!contours.empty())
{
//result:存放轮廓,contours:找到的轮廓,-1:将所有轮廓画出,Scalar(255):由白色画,2:画笔粗细
drawContours(result,contours,-1,Scalar(255),2);
imshow("处理图",result);
}
}
//方法2
void Contours2(Mat &image)
{
Mat img1=Mat::zeros(image.size(),CV_8UC1);
//将image由彩色图像转换成灰度图像