Opencv无法在图像上绘制线条

时间:2019-11-27 16:28:35

标签: c++ opencv

我正在尝试在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);
}

它正在检测我的物体,但没有画出任何东西。

我把头撞在墙上解决了这个问题。有人可以提供一些指导吗?

1 个答案:

答案 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的大小和要在其上编写的坐标,我认为这将对调试很有帮助。也许您需要编写circleslines变量而不是rect