Java API: corrected names of methods in Utils class; fixed bug in DMatch (thank for Hussein Abdinoor); added new utility method loadResource

This commit is contained in:
Andrey Kamaev 2011-08-09 11:46:27 +00:00
parent 13e392763b
commit d9d74678a9
11 changed files with 125 additions and 76 deletions

View File

@ -26,7 +26,7 @@ public class OpenCVTestRunner extends InstrumentationTestRunner {
private AndroidTestRunner androidTestRunner; private AndroidTestRunner androidTestRunner;
private static String TAG = "opencv_test_java"; private static String TAG = "opencv_test_java";
public static String getTempFileName(String extension) public static String getTempFileName(String extension)
{ {
File cache = context.getCacheDir(); File cache = context.getCacheDir();
@ -46,7 +46,7 @@ public class OpenCVTestRunner extends InstrumentationTestRunner {
static public void Log(String message) { static public void Log(String message) {
Log.e(TAG, message); Log.e(TAG, message);
} }
static public void Log(Mat m) { static public void Log(Mat m) {
Log.e(TAG, m + "\n " + m.dump()); Log.e(TAG, m + "\n " + m.dump());
} }
@ -54,12 +54,13 @@ public class OpenCVTestRunner extends InstrumentationTestRunner {
@Override @Override
public void onStart() { public void onStart() {
context = getContext(); context = getContext();
LENA_PATH = Utils.ExportResource(context, R.drawable.lena); LENA_PATH = Utils.exportResource(context, R.drawable.lena);
CHESS_PATH = Utils.ExportResource(context, R.drawable.chessboard); CHESS_PATH = Utils.exportResource(context, R.drawable.chessboard);
LBPCASCADE_FRONTALFACE_PATH = Utils.ExportResource(context, R.raw.lbpcascade_frontalface); LBPCASCADE_FRONTALFACE_PATH = Utils.exportResource(context, R.raw.lbpcascade_frontalface);
/* /*
* The original idea about test order randomization is from marek.defecinski blog. * The original idea about test order randomization is from
* marek.defecinski blog.
*/ */
// List<TestCase> testCases = androidTestRunner.getTestCases(); // List<TestCase> testCases = androidTestRunner.getTestCases();
// Collections.shuffle(testCases); //shuffle the tests order // Collections.shuffle(testCases); //shuffle the tests order
@ -72,7 +73,7 @@ public class OpenCVTestRunner extends InstrumentationTestRunner {
androidTestRunner = super.getAndroidTestRunner(); androidTestRunner = super.getAndroidTestRunner();
return androidTestRunner; return androidTestRunner;
} }
public static String getOutputFileName(String name) public static String getOutputFileName(String name)
{ {
return context.getExternalFilesDir(null).getAbsolutePath() + File.separatorChar + name; return context.getExternalFilesDir(null).getAbsolutePath() + File.separatorChar + name;

View File

@ -16,6 +16,14 @@ public class UtilsTest extends OpenCVTestCase {
fail("Not yet implemented"); fail("Not yet implemented");
} }
public void testLoadResourceContextInt() {
fail("Not yet implemented");
}
public void testLoadResourceContextIntInt() {
fail("Not yet implemented");
}
public void testMatToBitmap() { public void testMatToBitmap() {
fail("Not yet implemented"); fail("Not yet implemented");
} }

View File

@ -1,62 +1,92 @@
package org.opencv.android; package org.opencv.android;
import org.opencv.core.CvException; import android.content.Context;
import org.opencv.core.Mat; import android.graphics.Bitmap;
import java.io.File; import org.opencv.core.CvException;
import java.io.FileOutputStream; import org.opencv.core.CvType;
import java.io.IOException; import org.opencv.core.Mat;
import java.io.InputStream; import org.opencv.highgui.Highgui;
import android.content.Context; import java.io.ByteArrayOutputStream;
import android.graphics.Bitmap; import java.io.File;
import java.io.FileOutputStream;
public class Utils { import java.io.IOException;
import java.io.InputStream;
public static String ExportResource(Context context, int resourceId) {
return ExportResource(context, resourceId, "OpenCV_data"); public class Utils {
}
public static String exportResource(Context context, int resourceId) {
public static String ExportResource(Context context, int resourceId, String dirname) { return exportResource(context, resourceId, "OpenCV_data");
String fullname = context.getResources().getString(resourceId); }
String resName = fullname.substring(fullname.lastIndexOf("/") + 1);
try { public static String exportResource(Context context, int resourceId, String dirname) {
InputStream is = context.getResources().openRawResource(resourceId); String fullname = context.getResources().getString(resourceId);
File resDir = context.getDir(dirname, Context.MODE_PRIVATE); String resName = fullname.substring(fullname.lastIndexOf("/") + 1);
File resFile = new File(resDir, resName); try {
InputStream is = context.getResources().openRawResource(resourceId);
FileOutputStream os = new FileOutputStream(resFile); File resDir = context.getDir(dirname, Context.MODE_PRIVATE);
File resFile = new File(resDir, resName);
byte[] buffer = new byte[4096];
int bytesRead; FileOutputStream os = new FileOutputStream(resFile);
while ((bytesRead = is.read(buffer)) != -1) {
os.write(buffer, 0, bytesRead); byte[] buffer = new byte[4096];
} int bytesRead;
is.close(); while ((bytesRead = is.read(buffer)) != -1) {
os.close(); os.write(buffer, 0, bytesRead);
}
return resFile.getAbsolutePath(); is.close();
} catch (IOException e) { os.close();
e.printStackTrace();
throw new CvException("Failed to export resource " + resName return resFile.getAbsolutePath();
+ ". Exception thrown: " + e); } catch (IOException e) {
} e.printStackTrace();
} throw new CvException("Failed to export resource " + resName
+ ". Exception thrown: " + e);
public static Mat BitmapToMat(Bitmap b) { }
return new Mat(nBitmapToMat(b)); }
}
public static Mat loadResource(Context context, int resourceId) throws IOException
public static boolean MatToBitmap(Mat m, Bitmap b) { {
return nMatToBitmap(m.nativeObj, b); return loadResource(context, resourceId, -1);
} }
// native stuff public static Mat loadResource(Context context, int resourceId, int flags) throws IOException
static { {
System.loadLibrary("opencv_java"); InputStream is = context.getResources().openRawResource(resourceId);
} ByteArrayOutputStream os = new ByteArrayOutputStream(is.available());
private static native long nBitmapToMat(Bitmap b); byte[] buffer = new byte[4096];
int bytesRead;
private static native boolean nMatToBitmap(long m, Bitmap b); while ((bytesRead = is.read(buffer)) != -1) {
} os.write(buffer, 0, bytesRead);
}
is.close();
Mat encoded = new Mat(1, os.size(), CvType.CV_8U);
encoded.put(0, 0, os.toByteArray());
os.close();
Mat decoded = Highgui.imdecode(encoded, flags);
encoded.release();
return decoded;
}
public static Mat bitmapToMat(Bitmap b) {
return new Mat(nBitmapToMat(b));
}
public static boolean matToBitmap(Mat m, Bitmap b) {
return nMatToBitmap(m.nativeObj, b);
}
// native stuff
static {
System.loadLibrary("opencv_java");
}
private static native long nBitmapToMat(Bitmap b);
private static native boolean nMatToBitmap(long m, Bitmap b);
}

View File

@ -48,7 +48,7 @@ public class DMatch {
/** /**
* less is better * less is better
*/ */
boolean lessThan(DMatch it) { public boolean lessThan(DMatch it) {
return distance < it.distance; return distance < it.distance;
} }

View File

@ -137,7 +137,7 @@ public class puzzle15View extends SampleCvViewBase implements OnTouchListener {
drawGrid(cols, rows); drawGrid(cols, rows);
Bitmap bmp = Bitmap.createBitmap(cols, rows, Bitmap.Config.ARGB_8888); Bitmap bmp = Bitmap.createBitmap(cols, rows, Bitmap.Config.ARGB_8888);
if (Utils.MatToBitmap(mRgba15, bmp)) if (Utils.matToBitmap(mRgba15, bmp))
return bmp; return bmp;
bmp.recycle(); bmp.recycle();

View File

@ -91,7 +91,7 @@ class FdView extends SampleCvViewBase {
Bitmap bmp = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888); Bitmap bmp = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888);
if (Utils.MatToBitmap(mRgba, bmp)) if (Utils.matToBitmap(mRgba, bmp))
return bmp; return bmp;
bmp.recycle(); bmp.recycle();

View File

@ -135,7 +135,7 @@ class ImageManipulationsView extends SampleCvViewBase {
Bitmap bmp = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888); Bitmap bmp = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888);
if (Utils.MatToBitmap(mRgba, bmp)) if (Utils.matToBitmap(mRgba, bmp))
return bmp; return bmp;
bmp.recycle(); bmp.recycle();

View File

@ -56,7 +56,7 @@ class Sample1View extends SampleViewBase {
Bitmap bmp = Bitmap.createBitmap(getFrameWidth(), getFrameHeight(), Bitmap.Config.ARGB_8888); Bitmap bmp = Bitmap.createBitmap(getFrameWidth(), getFrameHeight(), Bitmap.Config.ARGB_8888);
if (Utils.MatToBitmap(mRgba, bmp)) if (Utils.matToBitmap(mRgba, bmp))
return bmp; return bmp;
bmp.recycle(); bmp.recycle();

View File

@ -54,7 +54,7 @@ class Sample2View extends SampleCvViewBase {
Bitmap bmp = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888); Bitmap bmp = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888);
if (Utils.MatToBitmap(mRgba, bmp)) if (Utils.matToBitmap(mRgba, bmp))
return bmp; return bmp;
bmp.recycle(); bmp.recycle();

View File

@ -25,6 +25,16 @@
<arguments> <arguments>
</arguments> </arguments>
</buildCommand> </buildCommand>
<buildCommand>
<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
<triggers>auto,full,incremental,</triggers>
<arguments>
<dictionary>
<key>LaunchConfigHandle</key>
<value>&lt;project&gt;/.externalToolBuilders/Tutorial 2.1 Builder.launch</value>
</dictionary>
</arguments>
</buildCommand>
</buildSpec> </buildSpec>
<natures> <natures>
<nature>com.android.ide.eclipse.adt.AndroidNature</nature> <nature>com.android.ide.eclipse.adt.AndroidNature</nature>

View File

@ -56,7 +56,7 @@ class Sample4View extends SampleViewBase {
Bitmap bmp = Bitmap.createBitmap(getFrameWidth(), getFrameHeight(), Bitmap.Config.ARGB_8888); Bitmap bmp = Bitmap.createBitmap(getFrameWidth(), getFrameHeight(), Bitmap.Config.ARGB_8888);
if (Utils.MatToBitmap(mRgba, bmp)) if (Utils.matToBitmap(mRgba, bmp))
return bmp; return bmp;
bmp.recycle(); bmp.recycle();