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

本文通过一个具体的OpenCV程序实例,展示了如何使用approxPolyDP()函数来简化图像轮廓,减少轮廓点的数量,从而实现对图像轮廓的有效处理和绘图。通过对比处理前后的轮廓点数量,验证了该函数的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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 () 函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值