在多个框架上绘制一个矩形
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 y1
和x2 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 y1
x2 y2
在框外,则不会显示。如果您不想要部分矩形,请检查所有坐标是否为0 <= x < image.cols
和0 <= y < image.rows
。【参考方案2】:
一种简单的方法是先将这些框架合并/组合成一个更大的框架(比框大),然后在这个组合的框架上绘制框。
如果您需要绘制每个带有方框的小帧,您可以进一步从组合帧中提取 ROI。
【讨论】:
以上是关于在多个框架上绘制一个矩形的主要内容,如果未能解决你的问题,请参考以下文章
Javascript画布 - 矩形中的相交圆孔或如何合并多个圆弧路径