我正在尝试在opencv c ++中绘制一些形状
我首先提取一个边界框,然后在该框中画一条线。我的理解是,这条线将反映在原始图像中。
我的代码如下:
#include <stdio.h>
#include <opencv/cv.h>
#include <opencv/highgui.h>
#include <opencv/cxcore.h>
#include <math.h>
#include <array>
#include <unordered_set>
using namespace cv;
using namespace std;
void draw(Mat& frame){
auto best_viola_jones = frame.clone();
auto violaJonesDetections = get_detections();
for (auto &rect: violaJonesDetections) {
auto clone = best_viola_jones(rect);
auto circles = get_circles();
auto lines = get_lines();
if (dartboardDetected(circles, lines, rect)) {
counter += 1;
cout << "detected" << endl;
rectangle(clone, Point(rect.x, rect.y),
Point(rect.x + rect.width, rect.y + rect.height),
Scalar(255, 0, 0), 2);
}
}
cout << "Total dartboards detected: " << counter;
imwrite("result/best_viola_jones.jpg", best_viola_jones);
}
它正在检测我的物体,但没有画出任何东西。
我把头撞在墙上解决了这个问题。有人可以提供一些指导吗?
答案 0 :(得分:0)
`我没有发表评论的名声,但我有明确的问题/意见:
您提到画一条线,但似乎您正在画一个矩形:
rectangle(clone, Point(rect.x, rect.y),
Point(rect.x + rect.width, rect.y + rect.height),
Scalar(255, 0, 0), 2);
然后,您正在提取边界框
auto clone = best_viola_jones(rect);
在这里,我认为Rect是Rect2d,未声明。
然后,您正在使用rect
坐标进行绘制。 Point(rect.x, rect.y)
可能大于克隆的高度和宽度。
如果输出clone的大小和要在其上编写的坐标,我认为这将对调试很有帮助。也许您需要编写circles
和lines
变量而不是rect
。