26

As a practical developer I would like to make a good algorithm for my specific task, built from blocks, like a 'boundary extraction', or 'gamma correction' and so on, but I don't want to implement the wheel, making all that stuff, so I wander - if there's any powerful CV library, like C++'s OpenCV?

Saying "the best", I mean library having following properties:

  • Lot of different algorithms implemented
  • Extensibility - I can create new stuff in terms of the library
  • High performance
  • Thread safety
Illarion Kovalchuk
  • 5,774
  • 8
  • 42
  • 54

3 Answers3

41

You might be interested in a pure Java open source computer vision library I have developing, BoofCV. BoofCV supports many common image processing operations, advanced feature detection, wavelet denoising, camera calibration, stereo vision and structure from motion . It's also very fast. Currently has the fastest SURF implementation out of any open source library, including C/C++ ones. Speed wise, it is very competitive with OpenCV for mid to high level vision algorithms. OpenCV is of course faster for low level image processing.

Website: http://boofcv.org

OpenCV vs BoofCV: http://boofcv.org/index.php?title=Performance:OpenCV:BoofCV

SURF Performance Study: http://boofcv.org/index.php?title=Performance:SURF

Ok enough marking. Hope you guys like it!

  • Much of the code is already in place, just missing a couple of components.
lessthanoptimal
  • 2,722
  • 2
  • 23
  • 25
  • 2
    +1 This is so very interesting. I wonder if it has templateMatching() from openCV. – KJW Jul 02 '12 at 06:06
  • I don't know how you tested performance but something isn't adding up. I quite like Java and C#, but am all too familiar with some of their performance weak spots for data processing. Java and C# both have an inherent performance weakness in array parsing because **every** single array access has to be wrapped in a check on the array bounds in order to meet the guarantees of the language. For any tight loop on array data (such as an image) this overhead becomes quite significant. –  Mar 24 '15 at 19:37
  • 2
    source code is available. run it yourself, I've had other confirm my SURF results. Basically you're making an assumption that both sets are code are equivalent, which they are not... You do see the issues you're talking about in simple array heavy low level operations and C/C++ libraries dominate that. – lessthanoptimal Mar 26 '15 at 11:39
11

Shaman, I have been looking a long time for a image processing library comparable to opencv in Java. For the amount of automated tasks opencv performs there is nothing that comes close to it for the advanced machine vision type applications.

In terms of image processing though imagej has a large amount of preimplemented algorithms and plugins. I use this library all the time to preprocess things I need to send into opencvs machine vision utilities. This is also open source with easy ways of adding additional features through plugins or direct manipulations so I think it could meet most of your requirements.

Mimyck
  • 403
  • 6
  • 9
5

OpenCV has Java wrappers:

Jay Askren
  • 10,282
  • 14
  • 53
  • 75