视频处理-在Android中使用JavaCv(OpenCV的Java包装器)进行图像过滤/操作



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

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

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

以下是我想强调的一些关键点

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

相关内容

  • 没有找到相关文章