OpenCV如何在C++中从网络摄像头(跟踪)绘制2个最大对象的轮廓
OpenCV how to draw a contour of 2 largest Object from webcam(tracking) in C++
有人能帮我解决这个问题吗?我需要用相同的颜色从两个最大的物体上绘制轮廓,但我总是会出错,这是我的代码。
void showconvex(Mat &thresh,Mat &frame)
{
int largest_index = 0;
int largest_contour = 0;
int second_largest_index = 0;
int second_largest_contour = 0;
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
//find contours
findContours(thresh, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);
/// Find the convex hull object for each contour
vector<vector<Point> >hull(contours.size());
vector<vector<int> >inthull(contours.size());
vector<vector<Vec4i> >defects(contours.size());
for (int i = 0; i < contours.size(); i++)
{
convexHull(Mat(contours[i]), hull[i], false);
convexHull(Mat(contours[i]),inthull[i], false);
if (inthull[i].size()>3)
convexityDefects(contours[i], inthull[i], defects[i]);
}
//find largest contour
for (int i = 0; i< contours.size(); i++) // iterate through each contour.
{
double a = contourArea(contours[i].size()); // Find the area of contour
if (a>largest_contour)
{
second_largest_contour = largest_contour;
second_largest_index = largest_index;
largest_contour = a;
largest_index = i;
}
else if(contours[i].size() > second_largest_contour)
{
second_largest_contour = contours[i].size();
second_largest_index = i;
}
}
drawContours(frame, contours, largest_index, CV_RGB(0,255,0), 2, 8, hierarchy);
drawContours(frame, contours, second_largest_index, CV_RGB(0,255,0), 2, 8, hierarchy);
}
在您的cv::findContours()调用后,捕获contoures.size()为零时的情况:
if ( contours.size() == 0 ) return;
否则,将绘制不存在的largest_index(等于0)和second_largest_index(也等于0)的轮廓。
相关文章:
- 无法使用VAO和EBO(openGL)绘制多个对象
- 如何在 Gnuplot 中分别绘制 2 个文件数据?我有一个文件"sin.txt",另一个文件"cos.txt",我想将它们分别绘制在一个图表上
- 绘制一个对象,比较模具缓冲区的两个不同值
- Opengl 和 c++ 绘制多个立方体
- 在 Vulkan 中绘制多个对象
- 我正在尝试创建一个 C++ 贪吃蛇游戏,但我似乎无法绘制第二个高度边框,我该如何解决这个问题?
- 如何从 std::set 绘制 n 个元素的样本
- OpenGL 2D游戏只绘制第二个精灵纹理而不是第一个
- C++:OpenGL:绘制多个几何图形
- 如何检查在 Adafruit TFT 屏幕上绘制的两个圆圈是否相互接触
- 如何绘制多个矩形 FLTK C++
- 基本 GLSL:两个片段着色器彼此相邻,但第一个(绘制纹理)被覆盖
- SFML 将形状绘制到屏幕上的多个位置
- DirectX 使用 Draw Primitive 绘制多个矩形
- 如何使用多个VAO和VBO在OpenGL中绘制多个对象
- 在Qt中绘制多个圆圈
- 用一个glDrawArrays命令绘制几个不同颜色的三角形
- 如何绘制一条光滑的曲线,该线经过QT中的几个点
- WTL 如何在同一窗口中使用 2 个自定义绘制的 CListViewCtr
- 在OpenGL中绘制多个2D纹理