Opencv 无法在图像上画线

Opencv unable to draw lines on image

本文关键字:图像 Opencv      更新时间:2023-10-16

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

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

我用头撞墙来解决这个问题。有人可以提供一些指导吗?

'我没有评论的声誉,但我有澄清的问题/评论:

你提到画一条线,但似乎你在画一个矩形:

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)大于克隆的高度和宽度。

如果您输出克隆的大小和您尝试在其上写入的坐标,我认为这将有助于调试。 也许您需要编写circleslines变量而不是rect.