- android/
- 在Android中使用JavaCv(OpenCV的Java包装器)进行图像过滤/操作
在Android中使用JavaCv(OpenCV的Java包装器)进行图像过滤/操作
在Android中使用JavaCv(OpenCV的Java包装器)进行图像过滤/操作,android,video-processing,javacv,iplimage,Android,Video Processing,Javacv,Iplimage,我的目标是将过滤器(灰度、复古、对比度、锐化、模糊、平滑等)应用于JavaCv的iplImage。在此过程中,我遇到了以下函数/类:iplImage、CvMat、cvInRangeS、cvtcolor、cvSmooth。我希望就这些问题作出澄清。以下是我的具体问题:
iplImage矩阵位图转换
iplImage的格式HSV/RGB/BGR…..参考CVT颜色的ARGB/XYZ/Bayer/LUV
形式多样
cvInRange演示
cvMat使用
我可以用这些来构建我的过滤器吗
我想与大家分享我
我的目标是将过滤器(灰度、复古、对比度、锐化、模糊、平滑等)应用于JavaCv的iplImage。在此过程中,我遇到了以下函数/类:iplImage、CvMat、cvInRangeS、cvtcolor、cvSmooth。我希望就这些问题作出澄清。以下是我的具体问题:
iplImage矩阵位图转换
iplImage的格式HSV/RGB/BGR…..参考CVT颜色的ARGB/XYZ/Bayer/LUV
形式多样
cvInRange演示
cvMat使用
我可以用这些来构建我的过滤器吗
我想与大家分享我在使用JavaCv进行图像和视频过滤时获得的知识。我已经成功地使用JavaCv开发了我的过滤器(灰度、复古、对比度、锐化、模糊和平滑)。我可以用位图操作轻松地进行图像过滤,但它太慢,无法用于视频过滤
我想强调以下几点
FFmpegFrameGrabber为我们提供了一个帧对象。这个物体有两部分:图像和声音。Frame.image给出iplImage,如果Frame.image==null,则为声音。实际上,Frame对象只包含一个特定时间的iplImage或声音
Frame.image接收的iplImage具有YCrCb格式。因此,使用cvColor将使用转换参数CV_YCrCb2RGB、CV_YCrCb2RGBA等
现在谈到FFmpegFrameRecorder,使用这个类可以很容易地录制iplImage,并通过调用recorder.record(Ipl_图像)生成视频。如果希望将frameGrabber和FrameRecorder用作反馈实现,则可以使用frameGrabber.getImageWidth()、frameGrabber.getImageHeight()、frameGrabber.GetAudioChannel()作为FFmpegFrameRecorder构造函数的参数
要从FrameGrabber录制声音,需要在每次迭代时检查Frame.image参数。如果不为空,则记录iplImage,如果为空,则记录帧。这样做将向录制的文件添加声音和图像
iplImage和位图可以使用writeToBuffer和coppyFromBuffer函数轻松地相互转换。但要记住的是位图有4个通道与之关联,因此iplImage对象也应该是4通道的
最后,关于图像过滤器,以下功能足以满足我的需要:
平滑:cvSmooth(IplSrc,IplSrc,CV_GAUSSIAN,9,9,2,2)李>
模糊:模糊=(int)(.05*IplSrc.width());
cvSmooth(IplSrc、IplSrc、CV_模糊、模糊)李>
灰度:CVT颜色
年份:CVD
平滑:cvSmooth(IplSrc,IplSrc,CV_中值,13)李>
对比度:cvInRangeS()