【问题标题】:Drawing an rectangle over an image, how can I rotate this rectangle, and get the parameters of it?在图像上绘制一个矩形,如何旋转这个矩形并获取它的参数?
【发布时间】:2012-07-08 13:49:32
【问题描述】:

我想开发一个小型应用程序,允许用户使用矩形来注释图像的不同部分。例如,用户可以在标有“头部”的图像上绘制一个矩形,这个应用程序可以获得这个矩形的参数(高度、宽度、中心坐标......)。 有时我还需要旋转这个矩形来选择一个特定的区域。

我想使用 Qt 来实现我的想法,但我不知道如何:

  1. 获取用户绘制的矩形的参数。 (高度、宽度、中心坐标...)
  2. 如何旋转矩形并获得旋转角度。

【问题讨论】:

  • 您以错误的方式看待问题。如果没有该信息,您的应用程序如何首先绘制矩形?选择一种绘制这些矩形的方法,以及一种供用户操作它们的方法,您将拥有所需的一切。查看 Qt 示例和教程以获取想法。
  • @Mat 嘿,Mat。其实这是一个手动标注的app,用户需要用鼠标选择区域,app可以收集这个区域的信息,所以这个app会先加载图片,然后用户选择区域。我的应用程序绘制矩形并让用户操作它很难实现,因为在一张图像中找到“头部”很困难,这项工作应该由用户在这个项目中完成。
  • 是的,没错。您的应用程序将处理用户的点击和鼠标在图像上的移动。您的应用将根据这些点击/移动/菜单操作等绘制矩形。您将获得所需的信息。
  • @Mat 我明白了。谢谢,我试试看。
  • @Mat 嘿,Mat。我收集用户点击的位置,并尝试使用这些信息创建一个矩形,但我找不到创建具有四个位置的矩形的函数。如果我先用这些位置信息计算出宽度和高度,然后选择一个位置来绘制矩形,我会得到一个矩形但会丢失旋转信息(矩形将与轴平行)。那么,我怎样才能旋转一个矩形。我认为一个棘手的方法是用这些位置绘制四条线,不是吗?

标签: qt qt4 computer-vision


【解决方案1】:

要让用户绘制矩形,您需要获取绘图小部件中发生的鼠标事件。您可以重新实现小部件的mousePressEvent、mouseMoveEvent、mouseReleaseEvent 或将event filter 安装到此小部件。当用户按下左键时,您应该记住事件的pos() 为矩形的左上角。当用户在此之后移动鼠标时,您应该设置移动事件的矩形右下角pos()。释放按钮必须提交创建一个矩形。

有几种绘制矩形的方法。您可以实现paintEvent 并在其中使用QPainter。但我认为最好的方法是使用QGraphicsScene。您可以创建可见的矩形、移动和旋转它们。

【讨论】:

  • 嘿,里亚切。我检查了QGraphicsScene的功能,但我不知道如何旋转一个矩形并显示它。你能解释更多吗?非常感谢。
  • 使用addRect 创建一个矩形。此函数将返回一个可以使用setRotation 方法旋转的对象。
  • 从用户那里获取旋转角度的正确方法是什么?
  • 我不知道。有很多方法可以实现。您必须选择它的外观。例如,您可以使用鼠标滚轮(可能使用 ctrl 修饰符)实现旋转鼠标悬停的矩形。
  • 我对你的建议很感兴趣,实际上,我正在按照你的建议做,但我是 QT 新手。你能解释更多关于如何用鼠标滚轮实现旋转,关于我应该改变什么的提示吗?我还有一个疑惑,当我旋转一个 graphicsScene 时,我是旋转这个场景还是旋转整个图形视图的坐标系?非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-26
  • 1970-01-01
  • 2016-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多