我已经使用OpenCV 2.3.1和Android 2.2来查找位图中的轮廓,这似乎在三星Galaxy Ace上运行良好,但现在我需要帮助移动这些轮廓。我的目的是在拖动到不同位置时使选定的轮廓跟随用户的手指。任何形式的帮助都将受到赞赏。
修改 我现在可以根据用户的触摸移动轮廓,但是他们不会留在新位置。因此,我假设我需要从原始位置擦除图像并将其重新绘制在新位置。而且,它只有周围的轮廓移动而不是轮廓内的图像像素。我更关注图像像素。如何让图像像素移动到新位置?如果我能以某种方式获得轮廓内像素的坐标,那也很棒。
抱歉,我想上传图片,但似乎新成员无法在此阶段上传图片。例如 - 我的线条周围的轮廓是粉红色的。当我拖动时,只有轮廓移动并且线的黑色像素根本不移动。有什么方法可以让粉红色轮廓内的黑色像素移动?
另一个问题是,当我在一个像圆形或方形的封闭图形上尝试我的代码时,我会得到两个轮廓。一个用于内边界,一个用于外边界。但正如我之前所说,我对图像像素更感兴趣。请帮忙。
P.S。 - 图像可以是任何形状,任何形状。我刚刚举了一条线的例子。
答案 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;
}
}
希望它有所帮助。