有没有人使用过包装的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来说相当新,所以非常感谢任何帮助。
P.S。道歉。我知道这已经被另一个线程(Rotate camera preview to Portrait Android OpenCV Camera)覆盖了,我已经尝试了所有选项,但是这个条目被Ed Cotrell(Admin)从该线程删除了,我被告知要开始一个新的。
答案 0 :(得分: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。值得注意的另一个选择是使用以下方法旋转画布: -
Matrix matrix = new graphics.Matrix();
matrix.PostRotate(90);
DrawBitmap(image.ToBitmap(), matrix, _paint);
性能影响再次不明显。