我的目标是将过滤器(灰度、复古、对比度、锐化、模糊、平滑等)应用于JavaCv的iplImage。在这样做的过程中,我遇到了以下函数/类:iplImage、CvMat、cvInRangeS、cvCvtColor、cvSmooth。我希望就这些问题作出一些澄清。以下是我的具体问题:
- iplImage cvMatrix位图转换
- iplImage的格式HSV/RGB/BGR。。。。。ARGB/XXYZ/Bayer/LUV参考cvCvtColor
- cv平滑各种形式
- cvInRange演示
- cvMat使用
- 我可以用这些来构建我的过滤器吗
我想分享我在使用JavaCv进行图像和视频过滤时获得的知识。我已经成功地使用JavaCv开发了我的滤镜(灰度、复古、对比度、锐化、模糊和平滑)。我可以很容易地使用位图操作进行图像过滤,但它太慢了,无法用于视频过滤。
以下是我想强调的一些关键点
- FFmpegFrameGrabber为我们提供了一个Frame对象。这个对象有两个部分:iplImage和Sound。Frame.image给出iplImage,如果Frame.image==为null,则为声音。实际上,Frame对象只包含iplImage或某个特定时刻的声音
- Frame.image接收到的iplImage具有YCrCb格式。因此使用cvColor将使用转换参数CV_YCrCb2RGB、CV_YCr Cb2RGBA等
- 现在谈论FFmpegFrameRecorder,可以使用这个类轻松地录制iplImage,并生成调用recorder.record(Ipl_Image)的视频。您可以使用frameGrabber.getImageWidth()、frameGrabber.getImageHeight()、frameGrabber.getAudioChannels()作为FFmpegFrame recorder构造函数的参数,如果您希望使用FrameGrabber和FrameRecorder作为反馈实现
- 要从FrameGrabber录制声音,需要在每次迭代时检查Frame.image参数。如果这不是null,那么记录iplImage,或者如果它是null,则记录Frame。这样做会将声音和iplImage添加到录制的文件中
- iplImage和Bitmap可以使用writeToBuffer和coppyFromBuffer函数轻松地进行相互转换。但需要记住的是,位图有4个通道与其关联,因此iplImage对象也应该是4-Channeled
- 最后,关于图像过滤器,以下功能足以满足我的需求:
- 平滑:cvSmooth(IplSrc,IplSrc,CV_GAUSSIAN,9,9,2)
- BLur:BLur=(int)(.05*IplSrc.width());cvSmooth(IplSrc、IplSrc、CV_BLUR、BLUR)
- 灰度:cvCvtColor
- 年份:cvAddS
- 平滑:cvSmooth(IplSrc,IplSrc,CV_MEDIAN,13)
- 对比度:cvInRangeS()