在多个框架上绘制一个矩形

Posted

技术标签:

【中文标题】在多个框架上绘制一个矩形【英文标题】:Drawing a Rectangle over multiple frame 【发布时间】:2015-10-08 08:23:47 【问题描述】:

甚至可以吗? 让我解释一下。我有一个高盒子,我想在那个盒子上画一个矩形,但问题是盒子太大而无法放入框架中。我知道盒子的确切尺寸以及离盒子有多远。现在我想把我的相机从上到下移动,这样我就可以看到盒子上的整个矩形。

【问题讨论】:

您可以向cv::rectangle 提供不在框架内的坐标。因此,只需在移动相机和绘图后计算矩形的新 2D 坐标就可以了。 @ChronoTrigger 你能详细说明一下吗 您的问题是绘制矩形还是计算图像中框的坐标?我假设“盒子”是一个真实的物理对象。 @ChronoTrigger "Box" 是一个真实的物理对象。我的问题是绘制矩形。抱歉,如果我的问题不清楚 【参考方案1】:

我不确定我是否理解你的问题,但这是我的两分钱。

我假设你有一个框架,它是cv::Mat 中的一个图像,它显示一个对象(一个盒子),你想在它周围画一个矩形。您知道图像中对象的 2D 坐标。然后,你可以像这样画一个矩形:

cv::rectangle(image, cv::Point(x1, y1), cv::Point(x2, y2), cv::Scalar(255, 0, 0)); 

其中x1 y1x2 y2 是要显示的矩形的两个对角,cv::Scalar 是颜色(如果您的图像是CV_8UC3,则为红色)。

当您移动相机时,我假设您在新图像中重新计算对象的 2D 坐标。然后,您必须再次重绘矩形。最终的代码应该是这样的:

while (true) 
  cv::Mat image = getImageFromCamera();
  cv::Point corner1, corner2;
  computeRectangleCoordinates(corner1, corner2);
  // draw
  cv::rectangle(image, corner1, corner2, cv::Scalar(255, 0, 0));
  // display
  cv::imshow("box", image);
  cv::waitKey(5);

【讨论】:

非常感谢您的患者。而对于我的问题描述得不好 我的对象(框)比我的框架大得多。当我将相机从上到下移动时,我只想从对象顶部到底部绘制一个矩形。 如果坐标x1 y1x2 y2在框外,则不会显示。如果您不想要部分矩形,请检查所有坐标是否为0 <= x < image.cols0 <= y < image.rows【参考方案2】:

一种简单的方法是先将这些框架合并/组合成一个更大的框架(比框大),然后在这个组合的框架上绘制框。

如果您需要绘制每个带有方框的小帧,您可以进一步从组合帧中提取 ROI。

【讨论】:

以上是关于在多个框架上绘制一个矩形的主要内容,如果未能解决你的问题,请参考以下文章

Emgu CV 绘制旋转矩形

在多个矩形中绘制一个 NSString

为啥我想在 Qt 小部件上绘制的“矩形”没有出现?

Javascript画布 - 矩形中的相交圆孔或如何合并多个圆弧路径

制作一个按钮,其背景和内容仅在指定的内部矩形内绘制(而不是在其所有框架内)

是否可以用鼠标绘制一个矩形来选择多个DIV?