#include<opencv2/opencv.hpp>
#include<iostream>
#include<vector>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
Mat src = imread("5.jpg");
if (!src.data)
{
printf("can not open file");
return 0;
}
resize(src, src, Size(800, 800));
imshow("原始图", src);
Mat gray;
cvtColor(src, gray, COLOR_BGR2GRAY);
blur(gray, gray, Size(3, 3));
imshow("灰度图", gray);
Mat img;
vector<vector<Point>>contours;
vector<Vec4i>hi;
threshold(gray, img, 160, 255, THRESH_BINARY);
imshow("二值化", img);
findContours(img, contours, hi, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE, Point(0, 0));
vector<vector<Point>>contours_poly(contours.size());
vector<Rect>boundRect(contours.size());
vector<Point2f>center(contours.size());
vector<float>radius(contours.size());
for (int unsigned i = 0; i < contours.size(); i++)
{
Scalar color = Scalar(255, 0, 0);
drawContours(img, contours_poly, i, color, 1, 8, vector<Vec4i>(), 0, Point());
circle(img, center[i], 3, Scalar(255, 0, 0), -1, 8, 0);
circle(img, center[i], (int)radius[i], Scalar(0, 0, 255), 2, 8, 0);
}
imshow("效果图", img);
waitKey(0);
return 0;
}
确认一下
#include<opencv2/opencv.hpp>
有没有写错。
void drawdContours(
InputOutputArray image, //输入图像
InputArrayOfArrays contours, //所有的输入轮廓
int contourIdx, //轮廓绘制的指示变量
const Scalar& color, //轮廓的颜色
int thickness=1, //轮廓线条的粗细度
int lineType=8, //线条的类型(默认8---8连通线性;4;LINE_AA----抗锯齿线型)
InputArray hierarchy=noArray(), //可选的层次结构信息(默认noArray())
int maxLevel=INT_MAX, //表示用于轮廓绘制的最大等级(默认INT_MAX)
Point offset=Point() //每个轮廓点的可选偏移量
);
看一下这个函数定义。
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
也许对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10993204.html
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y