官方給的openCv工程需要自身下載,簡單處理後,我建議是以module的形式import進Android工程,下面說說遇到的問題。
另外,若調用Android 底層的東西時,最後在這裏建議選擇Open for Editing in Android Studio
。
- 一直提示需要安裝openCv Manager
切換到Android studio運行試下,先運行起來是沒問題的。 - couldn’t find libflutter.so
在加入jniLibs 時,總是報
Process: com.smart.flutteracesmart, PID: 31882
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.smart.flutteracesmart-1/base.apk"],nativeLibraryDirectories=[/data/app/com.smart.flutteracesmart-1/lib/arm64, /data/app/com.smart.flutteracesmart-1/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]] couldn't find "libflutter.so"
首先,在該文件夾下只留armeabi-v7a
然後,按圖片裏進行配置
但是有個問題,就是現在armeab64成爲了手機的主流,所以這是需要解決的矛盾…
- OpenCV error: Cannot load info library for OpenCV
看下這個log日誌打印的位置是:
try
{
System.loadLibrary("opencv_info");
libs = getLibraryList();
}
catch(UnsatisfiedLinkError e)
{
Log.e(TAG, "OpenCV error: Cannot load info library for OpenCV");
}
如果你的jni包已經準備完備,沒有的話可以到這裏下載;不要相信別人說的是沒有opencv_info;已經把資源放到工程裏了,只是說沒有被調用;建議,以module或者jar包的形式導入工程裏,那樣工程運行時會一併進行初始化。
- 打不開相機
提示不支持相機或者沒有相機,是因爲沒有給相關權限,打開手機:設置=》權限管理=》自己的app,手動給予權限,查看效果;另外,可以主動添加權限管理插件:simple_permissions - 相機打開後,畫面旋轉九十度
有的說是AndroidManifest.xml
文件中,爲相機activity添加屏幕屬性
android:screenOrientation=" portrait"
對於我來說,是沒卵用,所以選擇了下面這個方法,實現全屏相機:
找到deliverAndDrawFrame方法,並作修改
protected void deliverAndDrawFrame(CvCameraViewFrame frame) {
Mat modified;
if (mListener != null) {
modified = mListener.onCameraFrame(frame);
} else {
modified = frame.rgba();
}
boolean bmpValid = true;
if (modified != null) {
try {
Utils.matToBitmap(modified, mCacheBitmap);
} catch (Exception e) {
Log.e(TAG, "Mat type: " + modified);
Log.e(TAG, "Bitmap type: " + mCacheBitmap.getWidth() + "*" + mCacheBitmap.getHeight());
Log.e(TAG, "Utils.matToBitmap() throws an exception: " + e.getMessage());
bmpValid = false;
}
}
if (bmpValid && mCacheBitmap != null) {
Canvas canvas = getHolder().lockCanvas();
if (canvas != null) {
canvas.drawColor(0, android.graphics.PorterDuff.Mode.CLEAR);
if (BuildConfig.DEBUG)
Log.d(TAG, "mStretch value: " + mScale);
// ===修改這裏解決預覽旋轉90度問題
canvas.rotate(90, 0, 0);
float scale = canvas.getWidth() / (float) mCacheBitmap.getHeight();
float scale2 = canvas.getHeight() / (float) mCacheBitmap.getWidth();
if (scale2 > scale) {
scale = scale2;
}
if (scale != 0) {
canvas.scale(scale, scale, 0, 0);
}
canvas.drawBitmap(mCacheBitmap, 0, -mCacheBitmap.getHeight(), null);
// ===結束這裏解決預覽旋轉90度問題end
if (mFpsMeter != null) {
mFpsMeter.measure();
mFpsMeter.draw(canvas, 20, 30);
}
getHolder().unlockCanvasAndPost(canvas);
}
}
}