← Back to team overview

openshot.developers team mailing list archive

Re: CImg + OpenShot Video Editing Library

 

Hi ,

I send you the answer of David to Jonathan like he is not subscribe in
Launchpad.

*I must admit it is very hard for me to advocate the use of the CImg
Library, not because I think the library doesn't worth it, but because I'm
its main developer, and I know the library so well (basically more than any
other image processing library) that I have the tendency to think that the
other libraries are probably performing better.*
*You should better ask to someone who masters the use of several IP
libraries, to get a neutral advice.*
*Anyway, what I can say about CImg, is :*
*
*
*- In a sense, it is 'minimal'. As it is 'header-written' (as most C++
template-based libraries), it is often compiled 'on-the-fly', thus contains
only the binary code of the functions you actually use in your code, and
nothing more (a little bit, but very few). So, it probably won't be very
intrusive in your code if you use it. Moreover, it won't be very difficult
to make it compiling on various platforms, since it uses quite standard
libraries, and as it is header-based, you can just include the main library
file (CImg.h) as a part of your source code (this is allowed by the
licence). So I think CImg is very easy to be integrated in open-source
projects.*
*
*
*- Second, it has a native structure to manage sequence of images (the
'CImgList<T>' structure). It already has methods to read/write video files
as CImgList<T> instances, and it uses the ffmpeg libraries as well.*
*
*
*- Third, it has quite interesting algorithms to process images, but I think
these algorithms are quite 'basic'. There are very few 'high-level'
algorithms in it. Being a researcher in the image processing field, I've
designed CImg mainly to be able to prototype new IP algorithms from scratch,
providing the most classical algorithms, but nothing more (this is why also
it is quite a minimal library compared to others). So, you won't need very
complicated stuffs in it. However, there are nice methods for denoising,
estimating the motions between two frames, and few other ones. But it is
definitely not as rich as for instance OpenCV. It has been designed as a way
to write new IP algorithms quickly, instead of being a collection of lot of
IP algorithms. Maybe you should look closely to the documentation, and see
if all you need is there.*
*
*
*- Finally, I would the main drawback of the library is that it has not been
designed to be particularly fast. It doesn't take advantage of the GPUs, nor
multiple CPU cores for applying the algorithm. If you want really fast IP
algorithms, then you should take a look at OpenCV. Without being
particularly slow, CImg doesn't contain any assembler code or special
optimizations to make it really fast. Depending on your need, this can be a
serious bottleneck. Here again, think about the fact that CImg has been
designed to quickly write experimental codes. I know there have been a lot
of people finally using it in final product, since it appears to be stable
and fast enough to  do so, but this was not is primary goal.*
*
*
*As you see, I didn't really have the answer to your question. What I can do
is only to highlight the pros and cons of CImg. I hope it will help you to
make the good choice. I would also suggest looking at OpenCV, since this is
probably the most used (and fast) IP library in the world. I don't like its
design at all, but I must admit it is damn fast ! On the other hand, if you
want to write your own effects/filter, it will be a pain to do that :)*
*
*
*I would have a final suggestion : maybe you could check the G'MIC project (
http://gmic.sourceforge.net*
* *
*), which entirely relies on the use of the CImg library. It proposes a
framework to design and apply filters on images. G'MIC is a good way to
quickly test the CImg features without having to compile anything. It can be
also integrated in open-source projects as a black box providing hundreds of
filters ready to be applied. It comes with it own library.*
*You can see here, an example of code using the libgmic library :
http://gmic.cvs.sourceforge.net/viewvc/gmic/gmic/src/gmic_use_lib.cpp?view=markup
*
* *
*
*
*Best Regards,*
*
*
*David.*
*
*
*PS : Of course, I already knew OpenShot, since I've already discussed with
Olivier Girard, and I'm following his blog with a great attention. Good luck
for this wonderful project.*
*

*And it was the chance the upload of the video. Google video will be soon
closed. I am speaking currently with him and it is very interesting.

Regards.

Olivier
*
*
*2011/4/19 David.Tschumperle@xxxxxxxxxxxxxxxxx <
David.Tschumperle@xxxxxxxxxxxxxxxxx>
*
>
> *Salut Olivier,*
> *Voici ma réponse au mail de Jonathan.*
> *
> *
> *David.
>
> *
> *---------- Forwarded message ----------
> From: David.Tschumperle@xxxxxxxxxxxxxxxxx* <
> David.Tschumperle@xxxxxxxxxxxxxxxxx>
> Date: 2011/4/19
> Subject: Re: CImg + OpenShot Video Editing Library
> To: Jonathan Thomas <jonathan.oomph@xxxxxxxxx>
> Cc: OpenShot-Developers <openshot.developers@xxxxxxxxxxxxxxxxxxx>
>
>
> Hi Jonathan,
> *
> *
>
>> *My name is Jonathan Thomas, and I am the lead developer of OpenShot
>> Video Editor: http://www.openshot.org/, a popular open-source, non-linear
>> video editor for Linux.  We are developing a new C++ video editing library
>> to power the future of OpenShot, and are interested in discussing the
>> possibility of using CImg as our image processing back-end.  As our library
>> mixes layers of videos together, we will ultimately get 1 or more pixel
>> arrays and need to apply many traditional image processing techniques, such
>> as scaling, compositing, color correcting, applying effects, converting
>> color spaces, etc...  Ideally, these image processing techniques would be
>> very fast, and could keep up with real-time previewing... for smaller
>> resolution videos at least.  For each final frame of video, we
>> will ultimately end up with a single image, and either display it to the
>> screen, or encode the image back to a video file.  Our video encoding and
>> decoding uses FFmpeg, but after we decode each frame, we are dealing with
>> pixel arrays. *
>> *
>> *
>> *We are trying to determine the best C++ image processing library to use.
>>  So, based on what you know so far, do you think CImg would work well for
>> this type of use-case?  We have also evaluated ImageMagick++, which seems to
>> work nicely, but does not have all the features of CImg.  It also looks like
>> CImg has some integration with ImageMagick++, but I'm not sure exactly how
>> that works.  Any thoughts, advice, or suggestions would be very much
>> appreciated. =)*
>>
> *
> *
> *I must admit it is very hard for me to advocate the use of the CImg
> Library, not because I think the library doesn't worth it, but because I'm
> its main developer, and I know the library so well (basically more than any
> other image processing library) that I have the tendency to think that the
> other libraries are probably performing better.*
> *You should better ask to someone who masters the use of several IP
> libraries, to get a neutral advice.*
> *Anyway, what I can say about CImg, is :*
> *
> *
> *- In a sense, it is 'minimal'. As it is 'header-written' (as most C++
> template-based libraries), it is often compiled 'on-the-fly', thus contains
> only the binary code of the functions you actually use in your code, and
> nothing more (a little bit, but very few). So, it probably won't be very
> intrusive in your code if you use it. Moreover, it won't be very difficult
> to make it compiling on various platforms, since it uses quite standard
> libraries, and as it is header-based, you can just include the main library
> file (CImg.h) as a part of your source code (this is allowed by the
> licence). So I think CImg is very easy to be integrated in open-source
> projects.*
> *
> *
> *- Second, it has a native structure to manage sequence of images (the
> 'CImgList<T>' structure). It already has methods to read/write video files
> as CImgList<T> instances, and it uses the ffmpeg libraries as well.*
> *
> *
> *- Third, it has quite interesting algorithms to process images, but I
> think these algorithms are quite 'basic'. There are very few 'high-level'
> algorithms in it. Being a researcher in the image processing field, I've
> designed CImg mainly to be able to prototype new IP algorithms from scratch,
> providing the most classical algorithms, but nothing more (this is why also
> it is quite a minimal library compared to others). So, you won't need very
> complicated stuffs in it. However, there are nice methods for denoising,
> estimating the motions between two frames, and few other ones. But it is
> definitely not as rich as for instance OpenCV. It has been designed as a way
> to write new IP algorithms quickly, instead of being a collection of lot of
> IP algorithms. Maybe you should look closely to the documentation, and see
> if all you need is there.*
> *
> *
> *- Finally, I would the main drawback of the library is that it has not
> been designed to be particularly fast. It doesn't take advantage of the
> GPUs, nor multiple CPU cores for applying the algorithm. If you want really
> fast IP algorithms, then you should take a look at OpenCV. Without being
> particularly slow, CImg doesn't contain any assembler code or special
> optimizations to make it really fast. Depending on your need, this can be a
> serious bottleneck. Here again, think about the fact that CImg has been
> designed to quickly write experimental codes. I know there have been a lot
> of people finally using it in final product, since it appears to be stable
> and fast enough to  do so, but this was not is primary goal.*
> *
> *
> *As you see, I didn't really have the answer to your question. What I can
> do is only to highlight the pros and cons of CImg. I hope it will help you
> to make the good choice. I would also suggest looking at OpenCV, since this
> is probably the most used (and fast) IP library in the world. I don't like
> its design at all, but I must admit it is damn fast ! On the other hand, if
> you want to write your own effects/filter, it will be a pain to do that :)
> *
> *
> *
> *I would have a final suggestion : maybe you could check the G'MIC project
> (http://gmic.sourceforge.net), which entirely relies on the use of the
> CImg library. It proposes a framework to design and apply filters on images.
> G'MIC is a good way to quickly test the CImg features without having to
> compile anything. It can be also integrated in open-source projects as a
> black box providing hundreds of filters ready to be applied. It comes with
> it own library.*
> *You can see here, an example of code using the libgmic library :
> http://gmic.cvs.sourceforge.net/viewvc/gmic/gmic/src/gmic_use_lib.cpp?view=markup
> *
> *
> *
> *Best Regards,*
> *
> *
> *David.*
> *
> *
> *PS : Of course, I already knew OpenShot, since I've already discussed
> with Olivier Girard, and I'm following his blog with a great attention. Good
> luck for this wonderful project.*
> *
> *
> *
> *
> *--
> ------------------------------**------------------------------**
> -----------------
> David Tschumperlé
> CNRS Researcher
> GREYC (UMR-CNRS 6072)         E-mail: David.Tschumperle@xxxxxxxxxxxxxxxxx
> 6, Bd du Marechal Juin        Tel: +33 (0)2-31-45-29-24
> F-14050 CAEN Cedex            Fax: +33 (0)2-31-45-26-98
> France                        http://www.greyc.ensicaen.fr/~dtschump
> ------------------------------**------------------------------**
> -----------------
>
> *
> *
>
>
> --
> ------------------------------**------------------------------**
> -----------------
> David Tschumperlé
> CNRS Researcher
> GREYC (UMR-CNRS 6072)         E-mail: David.Tschumperle@xxxxxxxxxxxxxxxxx
> 6, Bd du Marechal Juin        Tel: +33 (0)2-31-45-29-24
> F-14050 CAEN Cedex            Fax: +33 (0)2-31-45-26-98
> France                        http://www.greyc.ensicaen.fr/~dtschump
> ------------------------------**------------------------------**
> -----------------*
>
>


-- 
Olivier
Cenwen un elfe sur la banquise/ an elve on the ice
Mon blog perso  sur le multimédia, Ubuntu, Linux et OpenShot :
http://linuxevolution.wordpress.com/
Le forum d'Openshot où vous me trouverez : http://openshotusers.com/
http://openshotusers.com/forum/index.php

References