Ich möchte das Wissen teilen, das ich während der Verwendung von JavaCv für die Bild- und Videofilterung erworben habe. Ich bin erfolgreich bei der Entwicklung meiner Filter (Graustufen, Vintage, Kontrast, Schärfe, Unschärfe & Glatt) mit JavaCv. Ich könnte leicht Bildfilterung mit Bitmap-Manipulation durchführen, aber es war zu langsam, um für die Videofilterung verwendet zu werden.
Dies sind einige der wichtigsten Punkte, die ich
- FFmpegFrameGrabber gibt uns ein Frame-Objekt hervorheben möchten. Dieses Objekt besteht aus zwei Teilen: Das iplImage und der Sound. Frame.image gibt das iplImage und wenn Frame.image == null, dann ist es der Sound. Tatsächlich enthält das Frame-Objekt nur iplImage oder den Sound zu einer bestimmten Zeit.
- Das von Frame.image empfangene iplImage hat das YCrCb-Format. Mit cvColor würde also der Konvertierungsparameter CV_YCrCb2RGB, CV_YCrCb2RGBA usw. verwendet werden.
- Wenn wir nun über FFmpegFrameRecorder sprechen, kann man einfach ein iplImage mit dieser Klasse aufzeichnen und das Video erzeugen, das den recorder.record (Ipl_Image) aufruft. Sie können frameGrabber.getImageWidth(), frameGrabber.getImageHeight(), frameGrabber.getAudioChannels() als Parameter für den Konstruktor von FFmpegFrameRecorder verwenden, wenn Sie den FrameGrabber und den FrameRecorder als Feedback-Implementierung verwenden möchten.
- Um den Sound von FrameGrabber aufzunehmen, muss der Parameter Frame.image bei jeder Iteration überprüft werden. Wenn dies nicht null ist, notieren Sie das iplImage oder, wenn es null ist, nehmen Sie den Frame auf. Dadurch fügen Sie der aufgenommenen Datei sowohl Sound als auch iplImage hinzu.
- Die iplImage und Bitmap können mit den Funktionen writeToBuffer und coppyFromBuffer einfach untereinander konvertiert werden. Es ist jedoch zu beachten, dass Bitmap 4 Kanäle zugeordnet ist, daher sollte das iplImage-Objekt auch 4-Kanalisiert sein.
- schließlich über Bildfilter, waren folgende Funktionen ausreichend meine Bedürfnisse zu dienen:
- Smooth: cvSmooth (IPLSRC, IPLSRC, CV_GAUSSIAN, 9,9,2,2);
- Blur: Unschärfe = (int) (.05 * IplSrc.Breite()); cvSmooth (IplSrc, IplSrc, CV_BLUR, Blur);
- Graustufen: cvCvtColor
- Vintage: cvAddS
- Smooth: cvSmooth (IPLSRC, IPLSRC, CV_MEDIAN, 13);
- Kontrast: cvInRangeS()
//////////// 360 –
//////////// 803 –
////// //// 1002! –