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 [email protected] < [email protected]> * > > *Salut Olivier,* > *Voici ma réponse au mail de Jonathan.* > * > * > *David. > > * > *---------- Forwarded message ---------- > From: [email protected]* < > [email protected]> > Date: 2011/4/19 > Subject: Re: CImg + OpenShot Video Editing Library > To: Jonathan Thomas <[email protected]> > Cc: OpenShot-Developers <[email protected]> > > > 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: [email protected] > 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: [email protected] > 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
_______________________________________________ Mailing list: https://launchpad.net/~openshot.developers Post to : [email protected] Unsubscribe : https://launchpad.net/~openshot.developers More help : https://help.launchpad.net/ListHelp

