2016-10-03 152 views
0

有沒有人使用過這個打包的Xamrin版本? https://components.xamarin.com/view/emgucv-v3將相機預覽旋轉到縱向Android OpenCV相機和Xamarin

我最近購買了這個許可證,並且碰到與此處所述完全相同的問題(Rotate camera preview to Portrait Android OpenCV Camera)。一直在使用各種方法。

首先將屏幕方向從橫向旋轉到縱向,但這只是以相同的旋轉形式(90度)顯示流。景觀似乎是唯一一個按我的意願工作的人。

我試圖用相機對象旋轉相機本身,但是這也不能解決問題。即

camera.SetDisplayOrientation(90); 

我有這個debuged次一個龐大的數字,看看那裏執行時,它似乎是開始屏幕的設置是否正確,而是由時間

protected override void OnDraw(Android.Graphics.Canvas canvas) 

運行添加FPS文本已翻轉回來。

我也嘗試使用Matrix翻轉圖像,但是這將幀速率從大約20FPS下降到大約6FPS。這太多了。一擊

真的在這裏掙扎,因爲這是現在構建我的應用程序的主要絆腳石。

我對Xamarin相當新,所以任何幫助都非常感謝。

P.S.道歉。我知道這已經被另一個線程(Rotate camera preview to Portrait Android OpenCV Camera)覆蓋了,我試過了所有的選項,但是Ed Cotrell(Admin)從該線程中刪除了這個條目,並且我被告知要開始一個新的選項。

回答

1

好,所以我想我明白了!

看來Xamarin中的OpenCV示例使用緩衝區中的原始數據流,並且默認情況下以90度角出現,無論您具有相機的UI佈局或設置/參數的方向。

所以,我返工內碼ProcessedCameraPreview

protected override void OnDraw(Android.Graphics.Canvas canvas) 

本來我是轉換圖像對象下面對本機的Android位圖和旋轉的。性能受到很大影響。

Image<Bgr, byte> image = _bgrBuffers.GetBuffer(0); 

所以,我想通了,如果我做了以下內容: -

Image<Bgr, byte> rotateImage = image.Rotate(90, new Bgr(System.Drawing.Color.Black)); 
canvas.DrawBitmap(rotateImage.ToBitmap(), 0, 0, _paint); 

在90度角的要求它將呈現。性能影響並不十分明顯。

我現在有圖像對象,我需要執行我想要使用的OpenCV函數。

P.S.值得注意的另一個值得注意的方法是使用Canvas旋轉畫面: -

Matrix matrix = new graphics.Matrix(); 
matrix.PostRotate(90); 
DrawBitmap(image.ToBitmap(), matrix, _paint); 

對性能的影響並不明顯。