2017-06-19 85 views
0

我正在製作一個android應用程序,它可以檢測從視頻捕獲的圖像幀中的對象。OpenCV,Android:從圖像中檢測對象而不是實時檢測

openCV中的示例應用程序僅提供有關實時檢測的示例。

附加信息:使用 - 我Haar分類

截至目前我存儲在ImageView的陣列捕獲的幀,如何使用的OpenCV檢測物體和周圍畫一個矩形?

for(int i=0 ;i <6; i++) 
     { 
      ImageView imageView = (ImageView)findViewById(ids_of_images[i]); 

      imageView.setImageBitmap(retriever.getFrameAtTime(looper,MediaMetadataRetriever.OPTION_CLOSEST_SYNC)); 
      Log.e("MicroSeconds: ", ""+looper); 
      looper +=10000; 
     } 

回答

2

我希望你已經在你的項目中集成了opencv 4 android庫。現在 ,你可以轉換圖像使用OpenCV的功能

Mat srcMat = new Mat(); 
Utils.bitmapToMat(yourbitmap,srcMat); 

一旦到墊子上,你有墊子,你可以申請OpenCV函數來找到圖像的矩形對象。 現在,按照代碼來檢測矩形:

Mat mGray = new Mat(); 
cvtColor(mRgba, mGray, Imgproc.COLOR_BGR2GRAY, 1); 
Imgproc.GaussianBlur(mGray, mGray, new Size(3, 3), 5, 10, BORDER_DEFAULT); 
Canny(mGray, mGray, otsu_thresold, otsu_thresold * 0.5, 3, true); // edge detection using canny edge detection algorithm 
List<MatOfPoint> contours = new ArrayList<>(); 
Mat hierarchy = new Mat(); 
Imgproc.findContours(mGray,contours,hierarchy,Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE); 

現在,你從圖像輪廓。所以,你可以從它得到最大的輪廓,並使用drawContour()方法繪製它:

for (int contourIdx = 0; contourIdx < contours.size(); contourIdx++){ 
Imgproc.drawContours(src, contours, contourIdx, new Scalar(0, 0, 255)-1); 
} 

你就完成了!你可以參考這個鏈接: Android using drawContours to fill region

希望它會幫助!