Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV/Android缓冲队列错误:已放弃表面纹理_Android_Opencv - Fatal编程技术网

OpenCV/Android缓冲队列错误:已放弃表面纹理

OpenCV/Android缓冲队列错误:已放弃表面纹理,android,opencv,Android,Opencv,Android和OpenCV的新功能。一直试图实现新书中的代码,通过实际的计算机视觉项目掌握OpenCV。该应用程序基本上使用OpenCV在相机预览中渲染卡通化图像。您可以触摸屏幕以保存卡通化图像 来自作者的源代码位于 我对cartonifierapp.java文件做了一个小的修改(见下文),这样我就可以用应用静态加载cartonifier库(原始代码抛出了一个不满意的linkerror) 我面临的问题是,当我将应用程序加载到Galaxy Nexus(Android 4.1.1)上时,我会看到一

Android和OpenCV的新功能。一直试图实现新书中的代码,通过实际的计算机视觉项目掌握OpenCV。该应用程序基本上使用OpenCV在相机预览中渲染卡通化图像。您可以触摸屏幕以保存卡通化图像

来自作者的源代码位于

我对cartonifierapp.java文件做了一个小的修改(见下文),这样我就可以用应用静态加载cartonifier库(原始代码抛出了一个不满意的linkerror)

我面临的问题是,当我将应用程序加载到Galaxy Nexus(Android 4.1.1)上时,我会看到一个空的黑屏。我的日志说:

E/BufferQueue(4744):[unnamed-4744-0]setBufferCount:SurfaceTexture 已经被抛弃了!E/Cartonifier::SurfaceView(4744): startPreview()失败

我认为这是一个记忆问题。我知道cpp代码可以工作,因为它在我的计算机上运行良好——尽管在相对较新的笔记本电脑(Asus U46E)上渲染速度较慢

我不知道如何解决这个问题。我找到的唯一有用的建议是。如果我替换catooniervewbase.java中的setPreview方法

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
     mCamera.setPreviewTexture( new SurfaceTexture(10) );
 else
     mCamera.setPreviewDisplay(null);

然后发生的事情是相机工作正常,我可以通过触摸屏幕保存卡通化的图像。请注意,这并不完全是期望的结果,因为我希望在相机预览中不断卡通化图像。相机之所以能正常工作,是因为我没有在“曲面视图”中写入内容(至少这是我的理解)。前面提到的答案有一些变通办法,但我不知道他在说什么

顺便说一句,我已经尝试了所有的OpenCV4Android应用程序示例,它们工作得很好。我也在使用OpenCV 2.4.3版。API级别目标为15

完整日志:

12-22 15:33:07.966:I/CartonifierApp(5999):实例化的新类 com.cartonifier.cartonifier应用程序12-22 15:33:07.966: I/CartonifierApp(5999):在创建12-22 15:33:07.966时调用: I/CartonifierApp(5999):尝试加载OpenCV库12-22 15:33:07.982:I/Cartonifier::SurfaceView(5999):实例化的新 class com.cartonifier.cartonifier视图12-22 15:33:07.990: I/CartonifierApp(5999):简历12-22 15:33:07.990: I/Cartonifier::SurfaceView(5999):openCamera 12-22 15:33:07.990: I/Cartonifier::SurfaceView(5999):释放摄像头12-22 15:33:08.099: D/OpenCVManager/Helper(5999):创建的服务连接12-22 15:33:08.099:D/OpenCVManager/Helper(5999):尝试获取库路径 12-22 15:33:08.138:D/OpenCVManager/Helper(5999):尝试获取 库列表12-22 15:33:08.169:D/OpenCVManager/Helper(5999):库 列表:“12-22 15:33:08.169:D/OpenCVManager/Helper(5999):第一个 尝试加载libs 12-22 15:33:08.169:D/OpenCVManager/Helper(5999): 正在尝试初始化OpenCV库12-22 15:33:08.169: D/OpenCVManager/Helper(5999):尝试加载库 /data/data/org.opencv.engine/lib/libopencv_java.so 12-22 15:33:08.169:

D/dalvikvm(5999):尝试加载lib /data/data/org.opencv.engine/lib/libopencv_java.so 0x41936a40 12-22

15:33:08.193:D/dalvikvm(5999):添加了共享库 /data/data/org.opencv.engine/lib/libopencv_java.so 0x41936a40 12-22

15:33:08.193:D/OpenCVManager/Helper(5999):opencvlibsinit还可以

12-22 15:33:08.193:D/OpenCVManager/Helper(5999):首次尝试 加载libs正常12-22 15:33:08.193:D/OpenCVManager/Helper(5999):Init 已完成状态0 12-22 15:33:08.193: D/OpenCVManager/Helper(5999):解除服务绑定12-22 15:33:08.200: D/OpenCVManager/Helper(5999):使用回调12-22调用 15:33:08.200:I/CartonifierApp(5999):OpenCV已成功加载

12-22 15:33:08.200:D/dalvikvm(5999):尝试加载lib /data/data/com.cartonifier/lib/libcartonifier.so 0x41936a40 12-22

15:33:08.200:D/dalvikvm(5999):添加了共享库 /data/data/com.cartonifier/lib/libcartonifier.so 0x41936a40 12-22

15:33:08.200:D/dalvikvm(5999):在中未找到JNI_OnLoad /data/data/com.cartonifier/lib/libcartonifier.so 0x41936a40, 跳过初始化12-22 15:33:08.200:D/OpenCVManager/Helper(5999): 已创建服务连接12-22 15:33:08.200: D/OpenCVManager/Helper(5999):尝试获取库路径12-22

15:33:08.232:D/OpenCVManager/Helper(5999):尝试获取库列表 12-22 15:33:08.271:D/OpenCVManager/Helper(5999):库列表:“

12-22 15:33:08.271:D/OpenCVManager/Helper(5999):首次尝试 加载libs 12-22 15:33:08.271:D/OpenCVManager/Helper(5999):尝试

init OpenCV libs 12-22 15:33:08.271:D/OpenCVManager/Helper(5999): 正在尝试加载库 /data/data/org.opencv.engine/lib/libopencv_java.so 12-22 15:33:08.271: D/dalvikvm(5999):尝试加载lib /data/data/org.opencv.engine/lib/libopencv_java.so 0x41936a40 12-22

15:33:08.271:D/dalvikvm(5999):共享库 “/data/data/org.opencv.engine/lib/libopencv_java.so”已加载到 相同的CL 0x41936a40 12-22 15:33:08.271:D/OpenCVManager/Helper(5999): OpenCV libs init还可以!12-22 15:33:08.271: D/OpenCVManager/Helper(5999):首次尝试加载libs是正常的

12-22 15:33:08.271:D/OpenCVManager/Helper(5999):初始化已完成,状态为0 12-22 15:33:08.271:D/OpenCVManager/Helper(5999):解除服务绑定 12-22 15:33:08.271:D/OpenCVManager/Helper(5999):使用回调调用 12-22 15:33:08.271:I/CartonifierApp(5999):OpenCV已成功加载 12-22 15:33:08.279:D/dalvikvm(5999):尝试加载lib/data/data/com.cartonifier/lib/libcartonifier.so 0x41936a40 12-22 15:33:08.279:D/dalvikvm(5999):共享库“/data/data/com.cartonifier/lib/libcartonifier.so”已加载到同一个CL 0x41936a40中 12-22 15:33:08.302:I/卡通化者::SurfaceView(5999):surfaceCreated 12-22 15:33:08.302:I/Cartonifier::SurfaceView(5999):surfaceChanged()。窗户尺寸:1196x670 12-22 15:33:08.302:I/Cartonifier::SurfaceView(5999):s
 mCamera.setPreviewDisplay(mHolder);
private BaseLoaderCallback  mLoaderCallback = new BaseLoaderCallback(this) {
    @Override
    public void onManagerConnected(int status) {
        switch (status) {
            case LoaderCallbackInterface.SUCCESS:
            {
                Log.i(TAG, "OpenCV loaded successfully");

                // Load native library after(!) OpenCV initialization
                System.loadLibrary("cartoonifier");
            } break;
            default:
            {
                super.onManagerConnected(status);
            } break;
        }
    }
};

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    Log.i(TAG, "called onCreate");
    super.onCreate(savedInstanceState);

    Log.i(TAG, "Trying to load OpenCV library");
    if (!OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback))
    {
      Log.e(TAG, "Cannot connect to OpenCV Manager");
    }

    requestWindowFeature(Window.FEATURE_NO_TITLE);

    mView = new CartoonifierView(this);
    setContentView(mView);

    // Call our "onTouch()" callback function whenever the user touches the screen.
    mView.setOnTouchListener(this);
}


@Override
protected void onPause() {
    Log.i(TAG, "onPause");
    super.onPause();
    mView.releaseCamera();
}

@Override
public void onResume()
{
    super.onResume();
    Log.i(TAG, "onResume");
    if (!OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback))
    {
      Log.e(TAG, "Cannot connect to OpenCV Manager");
    }   

    if( !mView.openCamera() ) {
        AlertDialog ad = new AlertDialog.Builder(this).create();  
        ad.setCancelable(false); // This blocks the 'BACK' button  
        ad.setMessage("Fatal error: can't open camera!");  
        /*ad.setButton("OK", new DialogInterface.OnClickListener() {  
            public void onClick(DialogInterface dialog, int which) {  
                dialog.dismiss();                      
                finish();
            }  
        });  */
        ad.show();
    }
}
try {
    setPreview();
} catch (IOException e) {
    Log.e(TAG, "mCamera.setPreviewDisplay/setPreviewTexture fails: " + e);
}

/* Notify that the preview is about to be started and deliver preview size */
onPreviewStarted(params.getPreviewSize().width, params.getPreviewSize().height);
/* Notify that the preview is about to be started and deliver preview size */
onPreviewStarted(params.getPreviewSize().width, params.getPreviewSize().height);

try {
    setPreview();
} catch (IOException e) {
    Log.e(TAG, "mCamera.setPreviewDisplay/setPreviewTexture fails: " + e);
}