【问题标题】:Android Camera preview that lights up with the change of a threshold (moving object)Android相机预览随着阈值的变化而亮起(移动物体)
【发布时间】:2013-12-26 16:00:29
【问题描述】:

我正在尝试使用 ADT 开发适用于 Android 的应用,但我卡在了相机的预览中。

我的应用程序应该尝试将在相机预览上绘制的矩形内对象的通道识别到相机预览中。 物体的移动必须点亮矩形。

我现在开发了我的预览并绘制了矩形。 我的想法包括两个步骤:

  1. 只制作灰色的预览色调
  2. 照亮矩形以改变矩形内的灰度阈值。

你有什么推荐的?

下面是完整的代码:

public class CameraTestActivity extends Activity {
CameraPreview cv;
DrawView dv;
FrameLayout bingo;



@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

    requestWindowFeature(Window.FEATURE_NO_TITLE);

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
}

public void Load(){

    Camera c = getCameraInstance();


    if (c != null){

        bingo = new FrameLayout(this);
        bingo.setLayoutParams(new LayoutParams(
                LayoutParams.FILL_PARENT,
                LayoutParams.FILL_PARENT));

        cv = new CameraPreview(this,c);
        bingo.addView(cv);

        dv = new DrawView(this);
        bingo.addView(dv);

        setContentView(bingo);
    }
    else {
        Toast toast = Toast.makeText(getApplicationContext(), 
                "Unable to find camera. Closing.", Toast.LENGTH_SHORT);
        toast.show();
        finish();
    }
}


public static Camera getCameraInstance(){
    Camera c = null;

    try {
        c = Camera.open();
    }
    catch (Exception e){
        e.printStackTrace();
    }
    return c; 
}


@Override
protected void onPause() {
    super.onPause();

    if (cv != null){
        cv.onPause();
        cv = null;
    }
}


@Override 
protected void onResume(){
    super.onResume();

    Load();
}

public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder mHolder;
private Camera mCamera;

public CameraPreview(Context context, Camera camera) {
    super(context);
    mCamera = camera;

    mHolder = getHolder();
    mHolder.addCallback(this);
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

public void surfaceCreated(SurfaceHolder holder) {
    try {
        mCamera.setPreviewDisplay(holder);
        mCamera.startPreview();
    } catch (IOException e) {
        Log.d("CameraView", "Error setting camera preview: " + e.getMessage());
    }
}

public void surfaceDestroyed(SurfaceHolder holder) {
}

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {

    if (mHolder.getSurface() == null){
      return;
    }

    try {
        mCamera.stopPreview();
    } catch (Exception e){
    }


    try {
        mCamera.setPreviewDisplay(mHolder);
        mCamera.startPreview();

    } catch (Exception e){
        Log.d("CameraView", "Error" + e.getMessage());
    }
}

public void onPause() {
    mCamera.release();
    mCamera = null;
}
}

public class DrawView extends SurfaceView{


public DrawView(Context context) {
    super(context);



    setWillNotDraw(false);
}

@Override
protected void onDraw(Canvas canvas){


    super.onDraw(canvas);
    Paint paint = new Paint();
    paint.setStyle (Paint.Style.STROKE);
    paint.setColor(Color.RED);

    canvas.drawRect((canvas.getWidth() / 2) - (canvas.getWidth() / 6),
            (canvas.getHeight() / 2) - (canvas.getHeight() / 14) ,
            (canvas.getWidth() / 2) + (canvas.getWidth() / 6),
            (canvas.getHeight() / 2) + (canvas.getHeight() / 14), paint);

}
}


}

【问题讨论】:

    标签: eclipse camera adt preview rect


    【解决方案1】:

    你没有画任何关于你的对象的东西。我之前写了一个简单的人脸检测应用。我创建了一个 relativeLayout、一个用于相机预览的 surfaceView 和一个用于绘制面矩形的自定义视图。我觉得和你的差不多。只需在onDraw 中绘制对象矩形即可。

    【讨论】:

    • 我的请求是关于如何识别盒子内的移动物体并使其对物体的移动敏感的建议。使用传感器监听器有意义吗?
    • 没有用于移动物体检测的 Android API。可以试试OpenCV或者其他的图像处理库,可以分析连续的帧,找出运动的物体。
    • 谢谢! :( 我希望发挥阈值颜色的变化......无论如何这是不可能的?
    猜你喜欢
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 2015-12-27
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    相关资源
    最近更新 更多