【OpenCV】轮廓提取——findContours()

       轮廓是图像的重要特征之一,有些时候,很容易将其和边缘混淆。因此查阅了关于轮廓和边缘的词条,以此加深对轮廓和边缘这两个概念的认识和理解。边缘是图像差异变化比较显著的地方,而轮廓则是构成图形和物体的边缘线条,属于边缘的一部分。对于形状单一的二值图像而言,物体轮廓和边缘是重合的。在OpenCV中,我们可以通过findContours函数提取图像的轮廓信息。

#include<opencv2/opencv.hpp>
#include<iostream>
#include<opencv2/highgui/highgui_c.h>
#include<vector>

using namespace cv;
using namespace std;


int main(int argv, char** argc)
{
	Mat src;
	src = imread("D://opencv//5.PNG");
	if (!src.data)
	{
		cout << "Could not loaded image..." << endl;
		return -1;
	}

	// convert binary image
	Mat grayImg, binImg;
	cvtColor(src, grayImg, COLOR_BGR2GRAY);
	threshold(grayImg, binImg, 100, 255, THRESH_BINARY | THRESH_OTSU);        //图像二值化

	// find contours
	vector<vector<cv::Point>> contours;
	vector<cv::Vec4i> hierarchy;
	findContours(binImg, contours, hierarchy, RETR_LIST, CHAIN_APPROX_SIMPLE); //提取轮廓

	// draw find result                                                 
	for (size_t i = 0; i < contours.size(); i++)
	{
        //绘制第i条轮廓
		drawContours(src, contours, (int)i, Scalar(0, 0, 255), 1, 8, hierarchy, 0);       
	}

	// show find result
	namedWindow("Find Result", WINDOW_AUTOSIZE);
	imshow("Find Result", src);
	waitKey(0);
	return 0;
}

结果如下:

 

 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值