在Android中使用OpenCV加载图像

vin*_*e88 13 java android opencv image

如果本网站已经涵盖了这个问题,我很抱歉,但我似乎找不到直截了当的答案.我正在制作一个Android应用程序,它使用OpenCV拍摄照片,处理它以检测物体,并找出场景中这些物体的坐标.

我为android找到的所有教程似乎都是实时处理相机预览或使用c ++,我更倾向于不必走c ++之路.我确定我错过了一些简单的东西,但我不知道它是什么.

另一方面,我试图检测的物体是桌子上的台球.什么是最好的预处理技术,以更好地检测球?我使用canny方法进行了快速测试,似乎从球上反射的光线破坏了圆形.

gar*_*rak 17

要在Android中加载图像,您可以使用

Bitmap bMap=BitmapFactory.decodeResource(getResources(),R.drawable.image1)
Run Code Online (Sandbox Code Playgroud)

其中image1是Android项目的Resources文件夹下的图像.然后使用android-opencv中的 matToBitmap或MatToBitmap方法将Bitmap转换为字节或Mat并使用C++(OpenCV)或Java进行处理.

如果你习惯使用Mat数据类型进行处理,你可以使用(你需要android-opencv项目来使用它)

Mat m = Highgui.imread("/media/path_to_image");
Run Code Online (Sandbox Code Playgroud)

你可以使用blob,hough circle来检测台球.没有办法回答这个问题.您可以尝试使用标准化的RGB或Lab颜色空间来游戏(去除台球的反射),看看你是否检测到了台球(通过运行霍夫圈,斑点探测器).

实时场景将要求您使用机器学习技术通过使用某些特征向量来检测台球,然后进行训练和测试.


Meh*_*ral 5

我知道为时已晚,但有人可能会使用它。

Highgui 已从 Android 版 opencv 中删除。

您可以使用 Imgcodes 代替。

Mat BGRMat = Imgcodecs.imread(getResources().getDrawable(R.drawable.img).toString());
Run Code Online (Sandbox Code Playgroud)


syo*_*nip 5

这对我有用(从这里得到答案:如何使用OpenCV在Android中获取可绘制输入的Mat)

Mat img = null;
try {
    img = Utils.loadResource(this, R.drawable.image_id, CvType.CV_8UC4);
} catch (IOException e) {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)