2012-07-03 47 views
1

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

编辑: 我现在能够移动基于用户的触摸轮廓,但随后他们不停留在新的位置。所以,我认为我需要从原始位置擦除图像,并在新图像上重新绘制图像。此外,它只有移动的周围轮廓,而不是轮廓内图像的像素。我更关心图像像素。我怎样才能让图像像素移动到新位置?如果我能以某种方式获得轮廓内像素的坐标,这也会很棒。

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

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

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

回答

1

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

当用户被触摸屏幕(侦听器被触发)时,您必须识别用户选择了哪个轮廓。为此使用pointPolygonTest功能。

关于运动:Contour只是Point个序列(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; 
    } 
} 

希望它有助于。

+0

感谢您的及时回复。那么,我尝试了直到“pointPolygonTest”方法,它工作正常,所以现在我将继续并实现运动轮廓的代码。 –

+0

嘿阿斯特,你的代码适用于移动轮廓。但是,我还需要移动由此轮廓包围的图像像素。图像像素似乎不随轮廓移动。有什么我在这里失踪?也许一个例子会有所帮助,请查看修订信息的问题。 –

+0

@AngadAdivrekar如果你已经接受了旧的问题,那么你必须创建一个新的问题。不幸的是,我不明白你的新问题。 – ArtemStorozhuk