我有一個二元矩陣進行腐蝕和膨脹功能:OpenCV的安卓程序瓶頸的形態機能
void Detector::morphOps(Mat& binFrame) {
Mat erodeElement = getStructuringElement(MORPH_ELLIPSE, Size(3, 3));
Mat dilateElement = getStructuringElement(MORPH_ELLIPSE, Size(10, 10));
erode(binFrame, binFrame, erodeElement);
dilate(binFrame, binFrame, dilateElement);
dilate(binFrame, binFrame, dilateElement);
}
這使得我的程序顯著檢測我要跟蹤的對象更加健壯。但是,這段代碼對於我的其他程序來說是一個巨大的瓶頸。當功能啓用時,我從25-30 fps下降到< 1 fps。有什麼我可以做,以防止它殺死我的幀率(除從我的程序中刪除它)?即另一個更有效地完成相同任務的opencv函數?
我也在考慮多線程,但我不確定如何在這裏實現它,因爲我對android和opencv相當陌生。上面的代碼是本機(jni)我的程序的一部分。
編輯:到目前爲止,我已經試過的替代品:
morphologyEx()開閉+ - 由於擴張規模需要比侵蝕尺寸不執行爲好。 morphologyEx()closing + dilate() - 在Android上沒有顯着的性能提升。
將MORPH_ELLIPSE更改爲MORPH_RECT。我現在得到〜8fps,但這仍然很慢。
謝謝!我也會看看你的問題。我的分辨率是640 x 480,但有時它開始於1920 x 1080,我不知道如何解決這個問題。你提到製造全球變量......這是否意味着將img尺寸設置爲全球?我不確定這會有什麼幫助,除非我理解不正確。 –
另外,忘了提及,我在不同的二進制mat對象上調用morphOps()7或8次,因爲我正在尋找不同hsv閾值的彩色對象。這是減慢我的速度,這就是爲什麼我正在考慮並行處理。 –
您應該致電: javaCameraView.setMaxFrameSize(size.width,size。高度); 在啓用視圖之前,像這樣: javaCameraView =(JavaCameraView)findViewById(R.id.cameraView); javaCameraView.setMaxFrameSize(size.width,size.height); javaCameraView.setVisibility(SurfaceView.VISIBLE); javaCameraView.setCvCameraViewListener(this); javaCameraView.enableView(); javaCameraView.enableFpsMeter(); –