在C++环境中使用 OpenCV 绘制边界框
Drawing Bounding-Box using OpenCV in C++ Enviroment
你好窥视我开发了一个软件来绘制输入图像的轮廓,现在我不会把它提升到一个新的水平,并在感兴趣的对象(即一个人)周围绘制边界框。我看了 boundingRect() 函数,但我正在努力理解它。也许有不同的函数算法绘制边界框.....?
这是我的程序代码:
#include "iostream"
#include<opencvcv.h>
#include<opencvhighgui.h>
#include<opencvml.h>
#include<opencvcxcore.h>
#include <iostream>
#include <string>
#include <opencv2/core/core.hpp> // Basic OpenCV structures (cv::Mat)
#include <opencv2/highgui/highgui.hpp> // Video write
using namespace cv;
using namespace std;
Mat image; Mat image_gray; Mat image_gray2; Mat threshold_output;
int thresh=100, max_thresh=255;
int main(int argc, char** argv) {
//Load Image
image =imread("C:/Users/Tomazi/Pictures/Opencv/tomazi.bmp");
//Convert Image to gray & blur it
cvtColor( image,
image_gray,
CV_BGR2GRAY );
blur( image_gray,
image_gray2,
Size(3,3) );
//Threshold Gray&Blur Image
threshold(image_gray2,
threshold_output,
thresh,
max_thresh,
THRESH_BINARY);
//2D Container
vector<vector<Point>> contours;
//Fnd Countours Points, (Imput Image, Storage, Mode1, Mode2, Offset??)
findContours(threshold_output,
contours, // a vector of contours
CV_RETR_EXTERNAL,// retrieve the external contours
CV_CHAIN_APPROX_NONE,
Point(0, 0)); // all pixels of each contours
// Draw black contours on a white image
Mat result(threshold_output.size(),CV_8U,Scalar(255));
drawContours(result,contours,
-1, // draw all contours
Scalar(0), // in black
2); // with a thickness of 2
//Create Window
char* DisplayWindow = "Source";
namedWindow(DisplayWindow, CV_WINDOW_AUTOSIZE);
imshow(DisplayWindow, result);
waitKey(5000);
return 1;
}
任何人都可以提出解决方案...?也许引导我访问一些资源,教程等。 阅读OpenCV文档并查看boundingRect()函数我仍然不明白。请帮忙:)
但您也可以自己轻松计算边界框,然后使用 rectangle
函数绘制它们:
int maxX = 0, minX = image.cols, maxY=0, minY = image.rows;
for(int i=0; i<contours.size(); i++)
for(int j=0; j<contours[i].size(); j++)
{
Point p = contours[i][j];
maxX = max(maxX, p.x);
minX = min(minX, p.x);
maxY = max(maxY, p.y);
minY = min(minY, p.y);
}
rectangle( result, Point(minX,minY), Point(maxX, maxY), Scalar(0) );
这个链接没有帮助?
我认为它演示了如何获取轮廓对象并使其成为多边形近似值,以及如何在其周围绘制边界矩形。
它似乎是基本的OpenCV演示之一。
我在这些帖子中谈到了边界框技术:
- 如何从图像中检测文本区域? 轮廓
- opencv:如何消除二进制图像中的小轮廓
- OpenCv 2.3 C - 如何隔离图像中的对象(简单C++演示)
我认为最后一个可能会帮助您了解标准技术的工作原理。OpenCV提供了一种更简单的方法。
相关文章:
- 如何使用 opencv 绘制绿色矩形?
- Opencv,在图像中的对象周围绘制一个框
- OPENCV C .在for循环中在不同的图像像素上绘制一个圆圈(应在每个循环运行时将图像打开)
- OPENCV-快速 简介:如何使用drawmatchesflags :: draw_rich_keypoints绘制关键
- 如何在Opencv中绘制匹配项
- OpenCV c++ 断言失败调用绘制轮廓
- 在OpenCV中绘制带有梯度颜色的线
- 在框架上使用 OpenCV 绘制矩形
- 如何在OpenCV中绘制线路
- 绘制凸度缺陷C OPENCV
- 如何在opencv中使用matlab c ++库绘制点
- 使用OpenCV教程中的任何一个进行人脸检测是否有任何函数可以计算绘制在人脸上的矩形的大小
- 从图像中裁剪椭圆形状,而不是在OpenCV中在内部绘制
- 使用 OpenCV C++绘制最大轮廓的凸包
- 使用Opencv/c++在Stream中的两点之间绘制aline
- OpenCV 3.1 绘制轮廓 '(-215) npoints > 0'
- OpenCV绘制一个椭圆从camshift算法输出
- 如何从三个鼠标点击在OpenCV绘制一个圆圈
- 在C++环境中使用 OpenCV 绘制边界框
- 使用opencv绘制阴影