【OpenCV 学习之路】approxPolyDP()函数验证

先看效果图:
在这里插入图片描述

Talk is cheap,show you the code.

#include<opencv2/opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;

void main()
{
	Mat srcImg(600,600, CV_8UC3, Scalar::all(255));//纯黑图像
	Mat dstImg(600, 600, CV_8UC3, Scalar::all(0));
	circle(srcImg,Point(299,299),100,Scalar(0,0,255));
	cvtColor(srcImg, srcImg, CV_BGR2GRAY);
	threshold(srcImg, srcImg, 200, 255, CV_THRESH_BINARY_INV);
	vector<vector<Point>> contours;
	vector<Vec4i> hierarcy;
	findContours(srcImg, contours, hierarcy, 0, CV_CHAIN_APPROX_NONE);

	vector<vector<Point>> contours_poly(contours.size());//用于存放折线点集

	for (int i = 0; i<contours.size(); i++)
	{
		approxPolyDP(Mat(contours[i]), contours_poly[i], 20, true);
		
	}

	cout << endl<< "contours[0].size() = " << contours[0].size() << endl 
		<< "contours_poly[0].size() = " << contours_poly[0].size();

	for (int i = 0; i<contours.size(); i++)
	{
		drawContours(dstImg, contours_poly, i, Scalar(0, 255, 255), 2, 8);  //绘制
	}
	imshow("approx", dstImg);
	imshow("srcImg", srcImg);
	waitKey(0);
}
/*
这个程序就验证了我的想法:
1.contours数组只有一组轮廓,所以只有一行
2.虽然contours数组只有一行,但是里面有多少个点是不知道的,但是我们可以输出contours[0].size()来查看,这里它是564
经过approxPolyDP(Mat(contours[i]), contours_poly[i], 20, true);
这个函数就把相差20的点保留下来存放在contours_poly[i]数组里,在经过approxPolyDP()函数处理后我在输出contours_poly[0].size()可以发现它的点只有8
*/

这个程序就验证了我的想法:

  1. contours数组只有一组轮廓,所以只有一行
  2. 虽然contours数组只有一行,但是里面有多少个点是不知道的,但是我们可以输出contours[0].size()来查看,这里它是564
    经过approxPolyDP(Mat(contours[i]), contours_poly[i], 20, true);
    这个函数就把相差20的点保留下来存放在contours_poly[i]数组里,在经过approxPolyDP()函数处理后我在输出contours_poly[0].size()可以发现它的点只有8

参考

  1. OpenCV 中 approxPolyDP () 函数
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值