編輯:關於Android編程
由於最近參加一個比賽需要用到人臉識別,但賽方限制使用第三方服務商提供的API雲服務調用,因此想到了使用javacv來實現,但通過百度、google搜索發現所有的教程都是在eclipse中搭建,為此頭疼了好幾天,今天早起重新搭建一氣呵成。寫此博客主要是給新手朋友們作為參考,也是我的第一篇博文。
1、准備工作 2、環境搭建 3、測試程序-首先需要在google網站上下載javacv需要的包
-網站:https://code.google.com/archive/p/javacv/downloads
-無法打開的朋友可用我分享的網盤下載 http://pan.baidu.com/s/1c2BIhmo
-下載的包: javacv-0.7-bin.zip、opencv-2.4.3-android-arm.zip
- 分別解壓 javacv-0.7-bin.zip、opencv-2.4.3-android-arm.zip 到任意目錄下
-此刻准備工作結束
1、使用AndroidStudio創建工程StudioTestJavaCV,名字可隨意
2、打開AndroidStudio工程,在Android視圖下無法看到工程目錄中的libs文件夾,因此點擊Android,將其更換Project視圖
將javacv-0.7-bin.zip 解壓的文件夾中的 javacv.jar、javacpp.jar 拷貝到libs文件夾中
然後右鍵工程,選擇Open Module Setting<喎?/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPqOs0aHU8U1vZHVsZXPPwrXEYXBwKLTLzqrE47XETW9kdWxltcTD+7PGKdbQtcQ8c3Ryb25nPkRlcGVuZGVuY2llczwvc3Ryb25nPqOsteO799PSsuDCzMmrtcS807rFKCspo6zRodTxPHN0cm9uZz4yLkZpbGUgZGVwZW5kZW5jeTwvc3Ryb25nPiAs0aHU8cztvNO41bLFv72xtL34wLS1xDxzdHJvbmc+amF2YWN2LmphcqGiamF2YWNwcC5qYXI8L3N0cm9uZz6hozxiciAvPg0KPGltZyBhbHQ9"這裡寫圖片描述" src="/uploadfile/Collfiles/20160422/20160422091155816.png" title="\" />
3、接下來需要拷貝.so,在eclipse中只需要在libs文件夾下建立armeabi文件夾即可,但是由於AndroidStudio使用gradle編譯,於eclipse不同,因此按照eclipse中的方法將無法完成搭建。因此,follow me
還是同樣的Project視圖下,app>src>main 目錄下新建jniLibs目錄,然後再jniLibs下再新建armeabi目錄
3、在 javacv-0.7-bin.zip 解壓的文件夾中找到 javacv-android-arm.jar 將其解壓出來
將該文件夾下的所有.so文件都拷貝到上一步新建的armeabi文件夾下
然後再將opencv-2.4.3-android-arm.zip 解壓出來的目錄下的 libs > armeabi 下的所有.so文件拷貝到上一步新建的armeabi文件夾下。
以上環境搭建完成
圖片翻轉:
注:本代碼來自網絡,若作者要求停止使用,請聯系本人立即刪除
package com.act.studiotestjavacv;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import static com.googlecode.javacv.cpp.opencv_core.IPL_DEPTH_8U;
import static com.googlecode.javacv.cpp.opencv_core.cvFlip;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.widget.ImageView;
import com.googlecode.javacv.cpp.opencv_core.IplImage;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView = (ImageView) findViewById(R.id.img1);
imageView.setImageResource(R.drawable.p4);
// 實例化控件
ImageView img = (ImageView) findViewById(R.id.img);
// 創建圖像, p4是隨便找的一張圖像,這裡可以自己隨便找一張圖片代替
Drawable drawable = idToDrawable(R.drawable.p4);
Bitmap bitmap = this.drawableToBitmap(drawable);
// 將Bitmap轉化為IplImage
IplImage iplImage = this.bitmapToIplImage(bitmap);
// 處理圖像,比如旋轉圖像
cvFlip(iplImage, iplImage, 0);
// 再將IplImage轉化為Bitmap
bitmap = this.IplImageToBitmap(iplImage);
img.setImageBitmap(bitmap);
}
/**
* IplImage轉化為Bitmap
* @param iplImage
* @return
*/
public Bitmap IplImageToBitmap(IplImage iplImage) {
Bitmap bitmap = null;
bitmap = Bitmap.createBitmap(iplImage.width(), iplImage.height(),
Bitmap.Config.ARGB_8888);
bitmap.copyPixelsFromBuffer(iplImage.getByteBuffer());
return bitmap;
}
/**
* Bitmap轉化為IplImage
* @param bitmap
* @return
*/
public IplImage bitmapToIplImage(Bitmap bitmap) {
IplImage iplImage;
iplImage = IplImage.create(bitmap.getWidth(), bitmap.getHeight(),
IPL_DEPTH_8U, 4);
bitmap.copyPixelsToBuffer(iplImage.getByteBuffer());
return iplImage;
}
/**
* 將資源ID轉化為Drawable
* @param id
* @return
*/
public Drawable idToDrawable(int id) {
return this.getResources().getDrawable(R.drawable.p4);
}
/**
* 將Drawable轉化為Bitmap
* @param drawable
* @return
*/
public Bitmap drawableToBitmap(Drawable drawable) {
if(drawable == null)
return null;
return ((BitmapDrawable)drawable).getBitmap();
}
}
可以隨便選擇一張圖片進行測試,效果如下
到這裡本次Android端javacv環境的搭建過程已經結束了,這是我的第一篇博客,第一次寫博客,想的太多,怕太粗略錯過重點,又怕太復雜沒有主次,總之是一個良好的開始,也算是作為一個學習的筆記作為後用,也希望能夠給跟我之前一樣在AndroidStudio上搭建javaCV環境遇到瓶頸的朋友作為一個參考。
1、 概述 DialogFragment在android 3.0時被引入。是一種特殊的Fragment,用於在Activity的內容之上展示一個模態的對
三種布局方式android對布局優化提供了三種布局:這三種布局都可以簡化我們的布局文件,優化繪制流程,下面我們簡單看一下這三種組件的使用方式。1、重用布局"ht
從2012年自學Android開始,到現在第4個年頭了,期間一直沒接觸正規的Android項目,加上這幾年一直忙.NET項目,導致去年有兩單Android的私活沒底氣接,
本節引言: 最近一段時間因為工作上的事以及面試等等,耽誤了博客的更新,這裡道歉下~ 今天下午去追夢網絡面試了一趟,全齊大神給小弟我上了一課,增長了