在Android上移动轮廓

时间:2012-07-03 10:58:20

标签: android opencv contour

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

修改 我现在可以根据用户的触摸移动轮廓,但是他们不会留在新位置。因此,我假设我需要从原始位置擦除图像并将其重新绘制在新位置。而且,它只有周围的轮廓移动而不是轮廓内的图像像素。我更关注图像像素。如何让图像像素移动到新位置?如果我能以某种方式获得轮廓内像素的坐标,那也很棒。

抱歉,我想上传图片,但似乎新成员无法在此阶段上传图片。例如 - 我的线条周围的轮廓是粉红色的。当我拖动时,只有轮廓移动并且线的黑色像素根本不移动。有什么方法可以让粉红色轮廓内的黑色像素移动?

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

P.S。 - 图像可以是任何形状,任何形状。我刚刚举了一条线的例子。

1 个答案:

答案 0 :(得分:1)

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

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

关于移动:Contour只是vector s的序列(Point)所以如果您想要移动(移动)某些轮廓,则必须执行以下操作( 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;
    }
}

希望它有所帮助。