提交 14bc6e3e 编写于 作者: A Andrey Kamaev

Modified Android Samples

上级 08f1f576
......@@ -3,5 +3,5 @@
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
<classpathentry kind="output" path="bin"/>
<classpathentry kind="output" path="bin1"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>OpenCV</name>
<name>opencv2.3.1</name>
<comment></comment>
<projects>
</projects>
......
......@@ -3,9 +3,9 @@
package="org.opencv"
android:versionCode="1"
android:versionName="1.0">
<application android:label="OpenCV">
<activity android:name="OpenCV"
android:label="OpenCV">
<application android:label="opencv2.3.1">
<activity android:name="opencv2.3.1"
android:label="opencv2.3.1">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
......
......@@ -32,9 +32,9 @@
</natures>
<linkedResources>
<link>
<name>OpenCVJavaAPI_src</name>
<name>opencv2.3.1_src</name>
<type>2</type>
<locationURI>_android_OpenCVJavaAPI_583dbd7b/src</locationURI>
<locationURI>_android_opencv2_3_1_d2471b5d/src</locationURI>
</link>
</linkedResources>
</projectDescription>
......@@ -2,12 +2,8 @@ package org.opencv.samples.s1;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.hardware.Camera;
import android.hardware.Camera.PreviewCallback;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import org.opencv.CvType;
import org.opencv.Mat;
......@@ -18,51 +14,23 @@ import org.opencv.core;
import org.opencv.imgproc;
import org.opencv.android;
import java.util.List;
class Sample1View extends SurfaceView implements SurfaceHolder.Callback, Runnable {
private static final String TAG = "Sample1Java::View";
private Camera mCamera;
private SurfaceHolder mHolder;
private int mFrameWidth;
private int mFrameHeight;
private byte[] mFrame;
private boolean mThreadRun;
private Mat mYuv;
private Mat mRgba;
private Mat mGraySubmat;
private Mat mIntermediateMat;
class Sample1View extends SampleViewBase implements SurfaceHolder.Callback {
Mat mYuv;
Mat mRgba;
Mat mGraySubmat;
Mat mIntermediateMat;
public Sample1View(Context context) {
super(context);
mHolder = getHolder();
mHolder.addCallback(this);
}
@Override
public void surfaceChanged(SurfaceHolder _holder, int format, int width, int height) {
if ( mCamera != null) {
Camera.Parameters params = mCamera.getParameters();
List<Camera.Size> sizes = params.getSupportedPreviewSizes();
mFrameWidth = width;
mFrameHeight = height;
//selecting optimal camera preview size
{
double minDiff = Double.MAX_VALUE;
for (Camera.Size size : sizes) {
if (Math.abs(size.height - height) < minDiff) {
mFrameWidth = size.width;
mFrameHeight = size.height;
minDiff = Math.abs(size.height - height);
}
}
}
params.setPreviewSize(mFrameWidth, mFrameHeight);
mCamera.setParameters(params);
mCamera.startPreview();
super.surfaceChanged(_holder, format, width, height);
Log.e("SAMP1", "surfaceChanged begin");
synchronized (this) {
Log.e("SAMP1", "surfaceChanged sync");
// initialize all required Mats before usage to minimize number of auxiliary jni calls
if(mYuv != null) mYuv.dispose();
mYuv = new Mat(mFrameHeight+mFrameHeight/2, mFrameWidth, CvType.CV_8UC1);
......@@ -75,36 +43,57 @@ class Sample1View extends SurfaceView implements SurfaceHolder.Callback, Runnabl
if(mIntermediateMat != null) mIntermediateMat.dispose();
mIntermediateMat = new Mat(mFrameHeight, mFrameWidth, CvType.CV_8UC1);
}
}
public void surfaceCreated(SurfaceHolder holder) {
mCamera = Camera.open();
mCamera.setPreviewCallback(
new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera) {
synchronized(Sample1View.this) {
mFrame = data;
Sample1View.this.notify();
}
}
}
);
(new Thread(this)).start();
}
Log.e("SAMP1", "surfaceChanged end");
}
public void surfaceDestroyed(SurfaceHolder holder) {
mThreadRun = false;
if(mCamera != null) {
synchronized(Sample1View.this) {
mCamera.stopPreview();
mCamera.setPreviewCallback(null);
mCamera.release();
mCamera = null;
}
@Override
protected Bitmap processFrame(byte[] data)
{
Log.e("SAMP1", "processFrame begin");
mYuv.put(0, 0, data);
Sample1Java a = (Sample1Java)getContext();
switch(a.viewMode)
{
case Sample1Java.VIEW_MODE_GRAY:
imgproc.cvtColor(mGraySubmat, mRgba, imgproc.CV_GRAY2RGBA, 4);
break;
case Sample1Java.VIEW_MODE_RGBA:
imgproc.cvtColor(mYuv, mRgba, imgproc.CV_YUV420i2RGB, 4);
core.putText(mRgba, "OpenCV + Android", new Point(10,100), 3/*CV_FONT_HERSHEY_COMPLEX*/, 2, new Scalar(255, 0, 0, 255), 3);
break;
case Sample1Java.VIEW_MODE_CANNY:
imgproc.Canny(mGraySubmat, mIntermediateMat, 80, 100);
imgproc.cvtColor(mIntermediateMat, mRgba, imgproc.CV_GRAY2BGRA, 4);
break;
case Sample1Java.VIEW_MODE_SOBEL:
imgproc.Sobel(mGraySubmat, mIntermediateMat, CvType.CV_8U, 1, 1);
core.convertScaleAbs(mIntermediateMat, mIntermediateMat, 8);
imgproc.cvtColor(mIntermediateMat, mRgba, imgproc.CV_GRAY2BGRA, 4);
break;
case Sample1Java.VIEW_MODE_BLUR:
imgproc.cvtColor(mYuv, mRgba, imgproc.CV_YUV420i2RGB, 4);
imgproc.blur(mRgba, mRgba, new Size(15, 15));
break;
}
// Explicitly dispose Mats
Bitmap bmp = Bitmap.createBitmap(mFrameWidth, mFrameHeight, Bitmap.Config.ARGB_8888);
android.MatToBitmap(mRgba, bmp);
Log.e("SAMP1", "processFrame end");
return bmp;
}
@Override
public void run() {
Log.e("SAMP1", "run");
super.run();
Log.e("SAMP1", "run2");
// Explicitly release Mats
if(mYuv != null) {
mYuv.dispose();
mYuv = null;
......@@ -122,52 +111,4 @@ class Sample1View extends SurfaceView implements SurfaceHolder.Callback, Runnabl
mIntermediateMat = null;
}
}
public void run() {
mThreadRun = true;
Log.i(TAG, "Starting thread");
while(mThreadRun) {
synchronized(this) {
try {
this.wait();
mYuv.put(0, 0, mFrame);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Sample1Java a = (Sample1Java)getContext();
switch(a.viewMode)
{
case Sample1Java.VIEW_MODE_GRAY:
imgproc.cvtColor(mGraySubmat, mRgba, imgproc.CV_GRAY2RGBA, 4);
break;
case Sample1Java.VIEW_MODE_RGBA:
imgproc.cvtColor(mYuv, mRgba, imgproc.CV_YUV420i2RGB, 4);
core.putText(mRgba, "OpenCV + Android", new Point(10,100), 3/*CV_FONT_HERSHEY_COMPLEX*/, 2, new Scalar(255, 0, 0, 255), 3);
break;
case Sample1Java.VIEW_MODE_CANNY:
imgproc.Canny(mGraySubmat, mIntermediateMat, 80, 100);
imgproc.cvtColor(mIntermediateMat, mRgba, imgproc.CV_GRAY2BGRA, 4);
break;
case Sample1Java.VIEW_MODE_SOBEL:
imgproc.Sobel(mGraySubmat, mIntermediateMat, CvType.CV_8U, 1, 1);
core.convertScaleAbs(mIntermediateMat, mIntermediateMat, 8);
imgproc.cvtColor(mIntermediateMat, mRgba, imgproc.CV_GRAY2BGRA, 4);
break;
case Sample1Java.VIEW_MODE_BLUR:
imgproc.cvtColor(mYuv, mRgba, imgproc.CV_YUV420i2RGB, 4);
imgproc.blur(mRgba, mRgba, new Size(15, 15));
break;
}
Bitmap bmp = Bitmap.createBitmap(mFrameWidth, mFrameHeight, Bitmap.Config.ARGB_8888);
android.MatToBitmap(mRgba, bmp);
Canvas canvas = mHolder.lockCanvas();
canvas.drawBitmap(bmp, (canvas.getWidth()-mFrameWidth)/2, (canvas.getHeight()-mFrameHeight)/2, null);
mHolder.unlockCanvasAndPost(canvas);
}
}
}
\ No newline at end of file
package org.opencv.samples.s1;
import java.util.List;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.hardware.Camera;
import android.hardware.Camera.PreviewCallback;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public abstract class SampleViewBase extends SurfaceView implements SurfaceHolder.Callback, Runnable {
private static final String TAG = "Sample::ViewBase";
private Camera mCamera;
private SurfaceHolder mHolder;
protected int mFrameWidth;
protected int mFrameHeight;
private byte[] mFrame;
private boolean mThreadRun;
public SampleViewBase(Context context) {
super(context);
mHolder = getHolder();
mHolder.addCallback(this);
}
public void surfaceChanged(SurfaceHolder _holder, int format, int width, int height) {
if ( mCamera != null) {
Camera.Parameters params = mCamera.getParameters();
List<Camera.Size> sizes = params.getSupportedPreviewSizes();
mFrameWidth = width;
mFrameHeight = height;
//selecting optimal camera preview size
{
double minDiff = Double.MAX_VALUE;
for (Camera.Size size : sizes) {
if (Math.abs(size.height - height) < minDiff) {
mFrameWidth = size.width;
mFrameHeight = size.height;
minDiff = Math.abs(size.height - height);
}
}
}
params.setPreviewSize(mFrameWidth, mFrameHeight);
mCamera.setParameters(params);
mCamera.startPreview();
}
}
public void surfaceCreated(SurfaceHolder holder) {
mCamera = Camera.open();
mCamera.setPreviewCallback(
new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera) {
synchronized(SampleViewBase.this) {
mFrame = data;
Log.i("SAMP1", "before notify");
SampleViewBase.this.notify();
Log.i("SAMP1", "after notify");
}
}
}
);
(new Thread(this)).start();
}
public void surfaceDestroyed(SurfaceHolder holder) {
mThreadRun = false;
if(mCamera != null) {
synchronized(this) {
mCamera.stopPreview();
mCamera.setPreviewCallback(null);
mCamera.release();
mCamera = null;
}
}
}
protected abstract Bitmap processFrame(byte[] data);
public void run() {
mThreadRun = true;
Log.i(TAG, "Starting thread");
Bitmap bmp = null;
while(mThreadRun) {
Log.i("SAMP1", "before synchronized");
synchronized(this) {
Log.i("SAMP1", "in synchronized");
try {
this.wait();
Log.i("SAMP1", "before processFrame");
bmp = processFrame(mFrame);
Log.i("SAMP1", "after processFrame");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Canvas canvas = mHolder.lockCanvas();
canvas.drawBitmap(bmp, (canvas.getWidth()-mFrameWidth)/2, (canvas.getHeight()-mFrameHeight)/2, null);
mHolder.unlockCanvasAndPost(canvas);
}
}
}
\ No newline at end of file
......@@ -32,9 +32,9 @@
</natures>
<linkedResources>
<link>
<name>OpenCVJavaAPI_src</name>
<name>opencv2.3.1_src</name>
<type>2</type>
<locationURI>_android_OpenCVJavaAPI_583dbd7b/src</locationURI>
<locationURI>_android_opencv2_3_1_d2471b5d/src</locationURI>
</link>
</linkedResources>
</projectDescription>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册