Eclipse Android摄像头预览,随着阈值的更改而亮起(移动对象)

Eclipse Android摄像头预览,随着阈值的更改而亮起(移动对象),eclipse,camera,adt,preview,rect,Eclipse,Camera,Adt,Preview,Rect,我正在尝试用ADT为Android开发一个应用程序,我被困在相机的预览上了 我的应用程序应该尝试在相机预览中识别在相机预览中绘制的矩形内对象的通道。 对象的移动必须照亮矩形 我现在开发了预览并绘制了矩形。 我的想法包括两个步骤: 仅预览灰色色调 照亮矩形以更改矩形内的灰度阈值 你推荐什么 以下是完整代码: public class CameraTestActivity extends Activity { CameraPreview cv; DrawView dv; FrameLayout bi

我正在尝试用ADT为Android开发一个应用程序,我被困在相机的预览上了

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

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

  • 仅预览灰色色调
  • 照亮矩形以更改矩形内的灰度阈值
  • 你推荐什么

    以下是完整代码:

    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);
    
    }
    }
    
    
    }
    

    你没有在你的物体上画任何东西。我以前写过一个简单的人脸检测应用程序。我创建了一个relativeLayout、一个用于相机预览的surfaceView和一个用于绘制面矩形的自定义视图。我想它和你的差不多。只需在
    onDraw
    中绘制对象矩形

    我的请求是关于如何识别盒子内移动的物体并使其对物体的移动敏感的建议。使用sensor listener有意义吗?移动对象检测没有Android API。您可以尝试OpenCV或其他图像处理库,它们可以分析连续帧并找出移动的对象。谢谢!:(我希望利用阈值颜色的变化……这在任何情况下都是不可能的?