将相机预览旋转到人像 Android OpenCV 相机和 Xamarin
Posted
技术标签:
【中文标题】将相机预览旋转到人像 Android OpenCV 相机和 Xamarin【英文标题】:Rotate camera preview to Portrait Android OpenCV Camera and Xamarin 【发布时间】:2017-02-11 05:20:11 【问题描述】:有人用过打包的 Xamrin 版本吗? https://components.xamarin.com/view/emgucv-v3
我最近购买了此许可证,遇到的问题与此处所述 (Rotate camera preview to Portrait android OpenCV Camera) 完全相同。一直在使用各种方法。
首先将屏幕方向从横向旋转到纵向,但这只是以相同的旋转形式(90 度)显示流。风景似乎是唯一可以按我的意愿工作的。
我尝试使用相机对象旋转相机本身,但这也不能解决问题。即
camera.SetDisplayOrientation(90);
我已经调试了很多次以查看执行发生的位置,并且似乎最初屏幕设置正确,但到了时间
protected override void OnDraw(Android.Graphics.Canvas canvas)
运行以添加已将其翻转回来的 FPS 文本。
我也尝试使用 Matrix 翻转图像,但这会将帧速率从大约 20FPS 降低到大约 6FPS。这太过分了。一击命中
在这里真的很挣扎,因为现在这是构建我的应用程序的主要绊脚石。
我是 Xamarin 的新手,非常感谢任何帮助。
附:道歉。我知道这已被另一个线程 (Rotate camera preview to Portrait Android OpenCV Camera) 覆盖,并且我已经尝试了那里的所有选项,但是 Ed Cotrell(管理员)从该线程中删除了该条目,并被告知要开始一个新的。
【问题讨论】:
【参考方案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 功能所需的图像对象。
附:另一个值得注意的选项是使用旋转画布:-
Matrix matrix = new graphics.Matrix();
matrix.PostRotate(90);
DrawBitmap(image.ToBitmap(), matrix, _paint);
再次对性能的影响并不明显。
【讨论】:
以上是关于将相机预览旋转到人像 Android OpenCV 相机和 Xamarin的主要内容,如果未能解决你的问题,请参考以下文章
如何在surfaceview中将Android相机更改为人像?