【问题标题】:Move contours on Android在 Android 上移动轮廓
【发布时间】:2012-07-03 23:31:18
【问题描述】:

我使用 OpenCV 2.3.1 和 Android 2.2 来查找位图中的轮廓,这在三星 Galaxy Ace 上似乎运行良好,但现在我需要帮助来移动这些轮廓。我的目标是使选定的轮廓在拖动到不同位置时跟随用户的手指。任何形式的帮助将不胜感激。

编辑: 我现在可以根据用户的触摸移动轮廓,但它们不会停留在新位置。所以,我假设我需要从原始位置删除图像并在新位置重绘它。此外,它只有周围的轮廓移动,而不是轮廓内的图像像素。我更关心图像像素。如何让图像像素移动到新位置?如果我能以某种方式获得轮廓内像素的坐标,那就太好了。

对不起,我想上传图片,但新成员似乎无法上传图片。例如 - 我有围绕粉红色线的轮廓。当我拖动时,只有轮廓移动,线条的黑色像素根本不移动。有什么方法可以让粉红色轮廓内的黑色像素移动?

另一个问题是,当我在一个封闭的图形(如圆形或正方形)上尝试我的代码时,我得到了两个轮廓。一个用于内部边界,一个用于外部边界。但正如我之前所说,我对图像像素更感兴趣。请帮忙。

附: - 图像可以是任何东西,任何形状。我刚刚举了一条线的例子。

【问题讨论】:

    标签: android opencv contour


    【解决方案1】:

    首先,您必须将TouchListener/ClickListener(或其他,我不知道Android API)添加到您的位图或画布中。

    当用户触摸屏幕(监听器被触发)时,您必须确定用户选择了哪个轮廓。为此使用pointPolygonTest 函数。

    关于移动:Contour 只是Points 的一个序列 (vector),所以如果你想移动(移动)一些轮廓,你必须执行以下(c++ 代码):

    void moveContour(vector<Point>& contour, int dx, int dy)
    {
        for (size_t i=0; i<contour.size(); i++)
        {
            contour[i].x += dx;
            contour[i].y += dy;
        }
    }
    

    希望对你有帮助。

    【讨论】:

    • 感谢您的及时回复。好吧,我已经尝试了“pointPolygonTest”方法,它工作正常,所以现在我将继续实现移动轮廓的代码。
    • 嘿 Astor,您的代码可以很好地移动轮廓。但是,我还需要移动被这个轮廓包围的图像像素。图像像素似乎没有随着轮廓移动。我在这里有什么遗漏吗?也许举个例子会有所帮助,请参阅问题以获取修改后的信息。
    • @AngadAdivrekar 如果您接受了旧问题,那么您必须创建一个新问题。很遗憾,我不明白你的新问题。
    猜你喜欢
    • 2013-06-13
    • 2012-01-04
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 2013-04-17
    • 2020-04-05
    相关资源
    最近更新 更多