OpenCV4Android Tutorial0解析

本文详细解析了Android程序中相机预览的实现机制,重点介绍了Sample0Base、Sample0View和SampleViewBase三个核心文件的功能。通过设置surfaceview、控制camera参数及数据回调,文章深入探讨了图像数据从camera到bitmap的转换过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Tutorial0是一个纯粹的android程序,没有opencv部分,是其他程序的框架基础。

 

有Sample0Base.java, Sample0View.java, SampleViewBase.java.三个文件。

 

Sample0Base 是程序入口,主要设置surfaceview和菜单。

requestWindowFeature(Window.FEATURE_NO_TITLE);
mView = new Sample0View(this);
setContentView(mView);

 

SampleViewBase 是继承于 SurfaceView,interface runnable。

主要控制camera的设置以及调用,画面的绘制。

重要在于:

mCamera.setPreviewTexture( new SurfaceTexture(10) );//隐藏原始数据

mCamera.setPreviewCallbackWithBuffer(new PreviewCallback() {//这里数据回调之后,copy到mFrame中,再到processFrame里进行处理 生成bitmap
public void onPreviewFrame(byte[] data, Camera camera) {
  synchronized (SampleViewBase.this) {
    if(mCopyOnce){
      mCopyOnce = false;
      System.arraycopy(data, 0, mFrame, 0, data.length);
      //Log.i(TAG,"data.length = "+data.length);
    }
    SampleViewBase.this.notify();
  }
  //Log.i(TAG, "copy mFrame data");
  camera.addCallbackBuffer(mBuffer);
  }
});

可以参考 http://stackoverflow.com/questions/10775942/android-sdk-get-raw-preview-camera-image-without-displaying-it?answertab=votes#tab-top

 

函数public void run() 的实现,这里用到了线程的等待,和唤醒操作。

wait(), notify();

之后就是绘制生成的bitmap

 

 

Sample0View 继承于 SampleViewBase。

主要用来生成bitmap。

 

 

我发现有一个问题,程序没有向camera传递数据,但是显示出来的是有图像的 而且一直在运动。

希望有大牛能为我解答一下。。  姑且认为这是camera类自有的显示图像。。

 

 

 

转载于:https://www.cnblogs.com/heezee/archive/2012/09/18/2688763.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值