【问题标题】:Positioning images based on detecting reference points within another image基于检测另一个图像中的参考点来定位图像
【发布时间】:2014-04-25 17:46:25
【问题描述】:

假设我有一个树的位图图像,我想在树叶上放置其他图像(例如苹果的位图)。有没有办法可以在叶子上放置标记……例如红点……然后以编程方式将苹果图像放在这些点的中心?

作为一个非常基本的测试,我有一个白色背景的图像,中心有一个红色像素。我想计算这个红点的坐标,然后在这些坐标上设置一个ImageView。

我该怎么办?

【问题讨论】:

  • 欢迎来到 StackOverflow!我已经编辑了你的问题,试图更好地捕捉你的意思。您也可以使用 EDIT 按钮编辑您的问题...还可以查看 history of who edited what

标签: android image-processing imageview positioning


【解决方案1】:

这取决于您的“红点”标记在哪里。如果它在中心或任何特定点(如宽度的 2/3,高度的 1/3),您可以将布局宽度和高度相除以获得正确的坐标。

在其他情况下,最好在覆盖的 dispatchDraw 方法中手动设置白色背景和绘制标记。在这种情况下,您只会知道标​​记的坐标。

【讨论】:

    【解决方案2】:

    您想将图像定位在红点上,对吗?

    我正在考虑两种不同的方式:

    A->您可以将红点本身设为 ImageView,然后使用gravity 将其居中,以便将其转换为另一种图像。

    或者……

    B-> 制作一个容器,使用带有红点的白色背景作为背景资源。然后也使用gravity 将其居中,最后将图像定位到容器的中心,使其位于红点上方。

    如果您认为这有帮助,则无需计算。

    【讨论】:

    • 感谢您的回复。中心的红点只是举例,它可以在图像的任何位置。例如,我有树的图像,我需要在树叶上定位另一个图像(苹果)。我想也许有一种方法,我可以在叶子上放置红点,然后以编程方式将苹果图像放在叶子上。
    • 我明白了,如何使用 [MotionEvent](developer.android.com/reference/android/view/… 您可以使用 getX() 和 getY() 方法获取坐标。但我认为它取决于像素,所以您可能需要这样做一些计算。
    • 是的。但我只想将它用于放置 onStart。用户不需要触摸屏。我会调查一下,也许我能找到一些东西。
    【解决方案3】:

    听起来你是把标记放到位图上的人。

    如果是这种情况,您是否有充分的理由尝试将标记作为数据嵌入位图本身?这导致您不得不重新发现这些位置的问题。这可能是一项模糊的任务……如果树旁边有一个红色的谷仓怎么办?您要在构成谷仓的每个红色像素上放置一个苹果图像吗?

    您可能真正想要的是定义一个格式,其中包含一个没有标记的位图,然后是一个单独的坐标列表,用于表示您希望苹果去哪里。这不需要任何类型的发现...您只需将图像与列表一起发送即可。

    在某些情况下,没有可以放置信息的“位置”,而您实际上需要将其放入位图文件中。如果是这样,还要考虑一些隐藏的地方,您可以将数据放在位图中......像 Exif 这样的元数据:

    http://en.wikipedia.org/wiki/Exchangeable_image_file_format

    所以这是一个中间立场,您可以设法将点列表“隐藏”到包含图像的文件中,而无需实际修改像素。

    如果您发现自己确实陷入必须将这些坐标规范放入图像数据中的情况,那么比红点更独特的东西会更容易确定地检测到.也许您对图像有所了解……例如,它们是 PNG 文件并且没有任何透明度。你可以让透明点表示替换点。

    图案越大越怪异,它就越稀有……因此,如果您知道要粘贴的对象总是大于 3x3,您可以为您的标记想出一个非常不寻常的 3x3 像素印记自然界中不太可能发生。以 24 位颜色未压缩,足够随机的模式只会偶然发生 1/(2^24^9)。少数;虽然压缩会产生更多的灰色区域。

    但更重要的是:如果您没有充分的理由将一个简单的问题变成一个复杂的图像识别练习,那就不要这样做。只需将点列表放在旁边某处,这样您就不必在图像中寻找它们。

    【讨论】:

      猜你喜欢
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 2012-07-07
      • 1970-01-01
      • 1970-01-01
      • 2013-12-08
      • 1970-01-01
      • 2011-07-05
      相关资源
      最近更新 更多