[英]issues in working with android portrait mode with opencv
我知道這是最重復的問題之一,但是,經過這么多的努力,卻找不到任何可行的解決方案。
盡管對於專家來說這可能是一個簡單的問題,但這確實是一個致命的問題。
我正在研究opencv Haar級聯分類器(例如:人臉檢測,眼對檢測)
我剛剛從“ OpenCV-2.4.9-android-sdk”中獲取了面部檢測示例代碼-示例。
此示例代碼在橫向模式下設置,並且一切正常 。
但是,我想使分類器在縱向模式下工作。 我知道haar 分類器 不能用於縱向模式 。
由於opencv使用“ CameraBridgeViewBase ”,因此id 不能使所有控件都以相機的分辨率播放並在屏幕上顯示圖像。(預覽)
現在,當我將屏幕方向設置為“ android:screenOrientation =“ portrait”時 ,圖像將順時針旋轉90度 。
我嘗試了什么:
要預覽肖像圖像而不旋轉 :我通過添加以下內容修改了“ CameraBridgeViewBase ”中的“ deliverAndDrawFrame”
Matrix matrix = new Matrix();
matrix.preTranslate((canvas.getWidth() - mCacheBitmap.getWidth()) / 2,(canvas.getHeight() - mCacheBitmap.getHeight()) / 2);
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
matrix.postRotate(90f,(canvas.getWidth()) / 2,(canvas.getHeight()) / 2);
canvas.drawBitmap(mCacheBitmap, matrix, null);
使分類器在縱向模式下工作:我進行了各種置換以及轉置和翻轉的組合,以旋轉傳遞給我的灰度圖像,以在“ onCameraFrame”中檢測多比例。
我怎么了
我無法獲得具有比“ onCameraFrame”更高的原始分辨率的圖像。 如何使圖像的原始或實際或原始質量達到相機傳感器的容量?
由於我已經為使分類器在縱向模式下工作而付出了很多努力,因此任何可行的建議/示例代碼/參考都將對我有很大幫助。
我找到了解決方案:
Matrix matrix = new Matrix();
matrix.preTranslate((canvas.getWidth() - mCacheBitmap.getWidth()) / 2,(canvas.getHeight() - mCacheBitmap.getHeight()) / 2);
matrix.postRotate(90f,(canvas.getWidth()) / 2,(canvas.getHeight()) / 2);
float scale = (float) canvas.getWidth() / (float) mCacheBitmap.getHeight();
matrix.postScale(scale, scale, canvas.getWidth()/2 , canvas.getHeight()/2 );
canvas.drawBitmap(mCacheBitmap, matrix, new Paint());
這提供了具有正確比例的人像模式:D請嘗試一下。 我正在使用OpenCV 3.4。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.