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