小编Vio*_*ion的帖子

在Android上的OpenCV中逐帧处理视频

我的目标如下:我必须读取存储在SD卡上的视频,将其处理为帧然后再将其存储在SD卡上的新文件中.问题是OpenCV4Android没有配备视频编码器/解码器,因为它不包括ffmpeg.此外,使用JavaCV处理图像对我来说是没有选择的,因为代码已经在本机OpenCV中编写,我通过JNI访问它们.我在stackoverflow和谷歌的其余部分做了很多阅读.但我没有找到解决方案.

  1. JavaCV允许我逐帧读取视频并逐帧存储.但是,我无法将视频转换为普通的OpenCV Mat对象,而这些对象可以由通常的OpenCV4Android处理.

  2. 我读到JCodec是一个用于编码/解码视频的库.JCodec会让我完成我的任务吗?如果是的话,你知道任何例子.

  3. 编译FFMPEG for Android也是一种选择.但是,我认为自己编写FrameGrabber和FrameRecorder有点过分.我认为除了JavaCV之外,还必须存在一些解决方案.

  4. 从API 18开始,Android中有MediaCodec和MediaMuxer.也许他们可以帮助我?

所以让我们来看看我的要求.我目前正在定位Android API 19,因此我可以使用我需要的所有功能.对我来说最重要的要求如下:

如果我使用30 FPS处理10秒的视频,结果也应该是10秒30 FPS的视频.所以我想要一个视频的精确副本,但是OpenCV会在每个帧中添加一些绘图.例如,通过Python 使用OpenCV可以通过使用VideoWriter类和VideoInput类来完成此任务.我在Android上需要相同的功能.

我想知道到目前为止没有人遇到这个问题(或者我没有找到它).

希望,我解释了一切.

video android opencv

7
推荐指数
1
解决办法
3278
查看次数

OpenCV:查找旋转点的原始坐标

我有以下问题。我正在使用 HaarClassifiers 在图像中搜索眼睛。由于头部的旋转,我试图在不同的角度找到眼睛。为此,我将图像旋转不同角度。为了旋转框架,我使用代码(用 C++ 编写):

    Point2i rotCenter;
    rotCenter.x = scaledFrame.cols / 2;
    rotCenter.y = scaledFrame.rows / 2;

    Mat rotationMatrix = getRotationMatrix2D(rotCenter, angle, 1);

    warpAffine(scaledFrame, scaledFrame, rotationMatrix, Size(scaledFrame.cols, scaledFrame.rows));
Run Code Online (Sandbox Code Playgroud)

这工作正常,我能够为眼睛提取两个 ROI 矩形。所以,我有每个 ROI 的上/左坐标以及它们的宽度和高度。然而,这些坐标是旋转图像中的坐标。我不知道如何将这个矩形反投影到原始框架上。

假设我获得了未缩放帧(full_image)的眼睛对 rois,但仍然旋转。

eye0_roi and eye1_roi
Run Code Online (Sandbox Code Playgroud)

我怎样才能将它们旋转回来,以便它们映射到正确的位置?

最好的问候,安德烈

c++ opencv rotation

3
推荐指数
1
解决办法
1773
查看次数

按下按钮时递增/递减计数器

我想围绕他的中心旋转图片(ImageView中的位图).通过使用preRotate方法和Bitmap的值width/2和height/2以及1或-1度作为旋转因子,这非常有效.

但我将旋转功能实现为按钮.每次按下"向右旋转"按钮时,Imageview会向右旋转一度,依此类推.按下按钮会很好,按下按钮时图片开始旋转,直到按钮被释放.

我在这里阅读了一些线程,其中这些功能实现为OnTouchListener而不是OnClickListener,但它对我不起作用.如果我在MotionEvent.ACTION_DOWN事件中实现循环,那么它们是无限的.如果我不使用循环,那么事件只处理一次(如在OnClickListener中).

那么在按下按钮时如何增加/减少旋转系数呢?

graphics android

2
推荐指数
2
解决办法
7040
查看次数

标签 统计

android ×2

opencv ×2

c++ ×1

graphics ×1

rotation ×1

video ×1