2015-05-24 388 views
2

我剛剛從OpenCv開始,現在我使用sdk for android而不使用C++頭。OpenCV Android - 在肖像模式下精心製作相機

我已經將找到的示例導入到我的android studio中,我已經按照在線發現的一些提示使其工作。現在他們工作,我已經嘗試過,但所有這些例子都有問題。 它們顯示相機預覽,或更好地從相機精心製作,然後在顯示屏上顯示,向右翻轉90度,並且它們也被鏡像。

這對我來說很奇怪,我不能使它正常工作,在線閱讀了很多技巧,這是一個非常普遍的問題。

我試過setDisplayOrientation(90)JavaCameraView類,但它只能用於顯示相機預覽,如果我嘗試在畫布表面上寫入它被鎖定併發生錯誤,所以我不能詳細說明框架了。

我試圖將onCameraFrame修改爲我的主類,但如果我嘗試使用core.flip旋轉相機逐幀,我將進入拉伸圖像或黑屏。最後這種方法使得攝像機的響應非常緩慢,因爲逐幀詳細闡述。

任何人都有此問題?如何解決它? OpenCv有沒有一種方法可以正確定位相機?

感謝

+0

你有沒有找到任何解決方案?如果您有任何解決方案以縱向模式顯示預覽,請發佈答案。 – IshRoid

+0

現在沒有找到解決方案。 – Inconsapevole

回答

1

我知道它的後期來回答這個問題。但我終於找到了解決方案,它不會使相機框架緩慢。
您必須對默認的opencv類進行更改。 按照此步驟:1)在CameraBridgeViewBase類添加以下代碼

Matrix matrix = new Matrix(); 
matrix.setRotate(90f); 
Bitmap bitmap = Bitmap.createBitmap(mCacheBitmap, 0, 0, mCacheBitmap.getWidth(), mCacheBitmap.getHeight(), matrix, true); 

2)現在在drawbitmap方法代替上面mCacheBitmap位圖,如像現在下面

if (mScale != 0) { 
      canvas.drawBitmap(bitmap, new Rect(0,0,bitmap.getWidth(), bitmap.getHeight()), 
        new Rect((int)((canvas.getWidth() - mScale*bitmap.getWidth())/2), 
          (int)((canvas.getHeight() - mScale*bitmap.getHeight())/2), 
          (int)((canvas.getWidth() - mScale*bitmap.getWidth())/2 + mScale*bitmap.getWidth()), 
          (int)((canvas.getHeight() - mScale*bitmap.getHeight())/2 + mScale*bitmap.getHeight())), null); 
     } else { 
canvas.drawBitmap(bitmap, new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()), 
        new Rect((canvas.getWidth() - bitmap.getWidth())/2, 
          (canvas.getHeight() - bitmap.getHeight())/2, 
          (canvas.getWidth() - bitmap.getWidth())/2 + bitmap.getWidth(), 
          (canvas.getHeight() - bitmap.getHeight())/2 + bitmap.getHeight()), null); 

}

3) ,在你JavaCameraView類取代initializeCamera方法下面的代碼(改變高度,寬度爲人像模式)

if ((getLayoutParams().width == ActionBar.LayoutParams.MATCH_PARENT) && (getLayoutParams().height == ActionBar.LayoutParams.MATCH_PARENT)) 
       mScale = Math.min(((float)height)/mFrameWidth, ((float)width)/mFrameHeight); 
      else 
       mScale = 0; 

你就完成了!希望它有幫助..

+0

我已經試過這和正常工作 – Khriz

+0

我這個變化中發現的唯一的問題是,我的實時修改圖像,現在是不一致的。我在現在只有黑色的圖像中繪製了一些彩色線條。我會盡力調查這一點,但如果你有一些線索:) – Khriz

+0

您能詳細了問題了嗎? – ImLearning