簡體   English   中英

將相機預覽旋轉到Portrait Android OpenCV Camera和Xamarin

[英]Rotate camera preview to Portrait Android OpenCV Camera and Xamarin

有人使用過打包的Xamrin版本嗎? https://components.xamarin.com/view/emgucv-v3

我最近購買了此許可證,並且遇到了與此處所述完全相同的問題(將相機預覽旋轉到Portrait Android OpenCV Camera )。 已經使用了多種方法。

首先,將屏幕方向從“橫向”旋轉到“縱向”,但這僅以相同的旋轉形式(90度)顯示流。 景觀似乎是我所願的唯一作品。

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

camera.SetDisplayOrientation(90);

我已經調試了很多次,以查看執行位置,看來最初屏幕設置正確,但是到那時

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

運行以添加已翻轉的FPS文本。

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

在這里真的很掙扎,因為這是構建我的應用程序的主要絆腳石。

我對Xamarin還是很陌生,因此非常感謝您的幫助。

PS歉意。 我知道這已經被另一個線程覆蓋了(將相機預覽旋轉到Portrait Android OpenCV Camera ),並且我嘗試了所有選項,但是Ed Cotrell(Admin)從該線程中刪除了此條目,並告訴我啟動一個新的一個。

好吧,我想我明白了!

似乎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功能所需的圖像對象。

PS另一個值得注意的選擇是,也可以使用以下方法來旋轉畫布:

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

再次,性能影響並不明顯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM