图像过滤/操作在Android中使用JavaCv(OpenCV的Java包装器)

Par*_*oor 5 android video-processing iplimage javacv

我的目标是将过滤器(灰度,复古,对比度,锐化,模糊,平滑等)应用于JavaCv的iplImage.在这样做时,我遇到了这些函数/类:iplImage,CvMat,cvInRangeS,cvCvtColor,cvSmooth.我想就这些问题寻求澄清.以下是我的具体问题:

  1. iplImage cvMatrix位图转换
  2. iplImage的格式HSV/RGB/BGR ..... ARGB/XYZ/Bayer/LUV参考cvCvtColor
  3. cvSmooth各种形式
  4. cvInRange演示
  5. cvMat用法
  6. 我可以用这些来构建我的过滤器

Par*_*oor 2

我想分享我在使用 JavaCv 进行图像和视频过滤时获得的知识。我已经成功地使用 JavaCv 开发了我的过滤器(灰度、复古、对比度、锐化、模糊和平滑)。我可以轻松地使用位图操作进行图像过滤,但它太慢而无法用于视频过滤。

这些是我想强调的一些要点

  1. FFmpegFrameGrabber 为我们提供了一个 Frame 对象。该对象有两部分: iplImage 和 Sound。Frame.image 给出 iplImage,如果 Frame.image==null,则它是声音。实际上,Frame 对象仅包含 iplImage 或某一特定时间实例的声音。
  2. Frame.image 接收到的 iplImage 具有 YCrCb 格式。因此,使用 cvColor 将使用转换参数 CV_YCrCb2RGB、CV_YCrCb2RGBA 等。
  3. 现在谈论 FFmpegFrameRecorder,可以使用此类轻松录制 iplImage 并调用 recorder.record(Ipl_Image) 生成视频。如果您希望使用 FrameGrabber 和 FrameRecorder 作为反馈实现,您可以使用 frameGrabber.getImageWidth()、frameGrabber.getImageHeight()、frameGrabber.getAudioChannels() 作为 FFmpegFrameRecorder 构造函数的参数。
  4. 要从 FrameGrabber 录制声音,需要在每次迭代时检查 Frame.image 参数。如果不为空,则记录 iplImage;如果为空,则记录 Frame。这样做会将声音和 iplImage 添加到录制的文件中。
  5. iplImage 和 Bitmap 可以使用 writeToBuffer 和 coppyFromBuffer 函数轻松地相互转换。但要记住的是,Bitmap 有 4 个与之关联的通道,因此 iplImage 对象也应该是 4 通道的。
  6. 最后关于图像过滤器,以下功能足以满足我的需求:
    1. 平滑:cvSmooth(IplSrc,IplSrc,CV_GAUSSIAN,9,9,2,2);
    2. BLur : 模糊=(int) (.05*IplSrc.width()); cvSmooth(IplSrc, IplSrc, CV_BLUR,模糊);
    3. 灰度:cvCvtColor
    4. 年份:cvAddS
    5. 平滑:cvSmooth(IplSrc, IplSrc, CV_MEDIAN, 13);
    6. 对比:cvInRangeS()