如果本网站已经涵盖了这个问题,我很抱歉,但我似乎找不到直截了当的答案。我正在制作一个Android应用程序,它使用OpenCV拍摄照片,处理它以检测物体,并找出场景中这些物体的坐标。
我为android找到的所有教程似乎都是实时处理相机预览或使用c ++,我更倾向于不必走c ++之路。我确定我错过了一些简单的东西,但我不知道它是什么。
另一方面,我试图检测的物体是桌子上的台球。什么是最好的预处理技术,以更好地检测球?我使用canny方法进行了快速测试,似乎从球上反射的光线破坏了圆形。
答案 0 :(得分:17)
要在Android中加载图片,您可以使用
Bitmap bMap=BitmapFactory.decodeResource(getResources(),R.drawable.image1)
其中image1是Android项目的Resources文件夹下的图像。 然后使用android-opencv中的matToBitmap或MatToBitmap方法将Bitmap转换为字节或Mat并使用C ++(OpenCV)或Java进行处理。
如果您对使用Mat数据类型进行处理感到满意,可以使用(需要android-opencv项目来使用它)
Mat m = Highgui.imread("/media/path_to_image");
你可以使用blob,hough circle来检测台球。没有办法回答这个问题。您可以尝试使用标准化的RGB或Lab颜色空间来游戏(去除台球的反射),看看你是否检测到了台球(通过运行霍夫圈,斑点探测器)。
实时场景将要求您使用机器学习技术通过使用某些特征向量来检测台球,然后进行训练和测试。
答案 1 :(得分:5)
这对我有用(从这里得到答案:How to get Mat with a drawable input in Android using OpenCV)
Mat img = null;
try {
img = Utils.loadResource(this, R.drawable.image_id, CvType.CV_8UC4);
} catch (IOException e) {
e.printStackTrace();
}
答案 2 :(得分:2)
我知道为时已晚,但有人可能会使用此功能。
Highgui已从opencv for android中删除。
您可以改用Imgcodes。
Mat BGRMat = Imgcodecs.imread(getResources().getDrawable(R.drawable.img).toString());