gpt4 book ai didi

Android,操纵相机预览帧

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:52:21 30 4
gpt4 key购买 nike

我想制作一个使用相机并在预览帧上应用图像处理滤镜的 Android 应用程序。

package alex.filter;

import java.io.IOException;

import android.content.Context;
import android.graphics.Canvas;
import android.hardware.Camera;
import android.hardware.Camera.PreviewCallback;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

class Preview extends SurfaceView implements SurfaceHolder.Callback {

SurfaceHolder mHolder;
public Camera camera;

Preview(Context context) {
super(context);
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

public void surfaceCreated(SurfaceHolder holder) {
camera = Camera.open();

try {
camera.setPreviewDisplay(holder);

camera.setPreviewCallback(new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera arg1) {
for( int i = 0 ; i < data.length ; i ++ ){
data[ i] = 0; // or some sirius filter
}
Preview.this.invalidate();
}
});
} catch (IOException e) {
e.printStackTrace();
}
}

public void surfaceDestroyed(SurfaceHolder holder) {
camera.stopPreview();
camera = null;
}

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewSize(w, h);
camera.setParameters(parameters);
camera.startPreview();
}

@Override
public void draw(Canvas canvas) {
super.draw(canvas);
}
}

但是,无论我在 onPreviewFrame 方法中做什么,我都看不到模拟器有任何变化。

最佳答案

另一种选择是使用具有 Android 端口的 OpenCV 框架:

http://opencv.willowgarage.com/wiki/Android2.3.0

它是开源开放计算机视觉项目的 NDK 端口,它将获取原始预览帧并允许在将它们显示在 SurfaceView 上之前使用 OpenCV 对其进行处理。因为它操纵帧,所以它的运行帧率与直接挂接在硬件优化预览中的帧率不完全相同,但由于其中大部分是 native 的,所以它做得很好。

上面链接的版本中有一个 OpenCV_Sample 应用程序,它编译成一个演示应用程序,可以完成您正在寻找的大部分工作。它具有启用反转、模糊图像或在预览区域进行边缘检测的菜单选项。即使它不是您想要的,源代码中也有一些很棒的示例可供学习。

关于Android,操纵相机预览帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6458334/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com