作者:XsiaoHan | 来源:互联网 | 2023-09-07 14:54
先看效果图:Talkischeap,showyouthecode.#include<opencv2opencv.hpp>
先看效果图:
Talk is cheap,show you the code.
#include
#include
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> contours;
vector hierarcy;
findContours(srcImg, contours, hierarcy, 0, CV_CHAIN_APPROX_NONE);
vector> contours_poly(contours.size());//用于存放折线点集
for (int i = 0; i
这个程序就验证了我的想法:
- contours数组只有一组轮廓,所以只有一行
- 虽然contours数组只有一行,但是里面有多少个点是不知道的,但是我们可以输出contours[0].size()来查看,这里它是564
经过approxPolyDP(Mat(contours[i]), contours_poly[i], 20, true);
这个函数就把相差20的点保留下来存放在contours_poly[i]数组里,在经过approxPolyDP()函数处理后我在输出contours_poly[0].size()可以发现它的点只有8
参考
- OpenCV 中 approxPolyDP () 函数