- Add
Java2DFrameConverterandOpenCVFrameConverter, and use them to refactorFrame,CanvasFrame,FrameGrabber, andFrameRecorderin a way to help users reduce coupling with Java 2D or OpenCV (issue #84) - Fix
Democlass in theREADME.mdfile (issue #102) - Add new
ColoredObjectTracksample (pull #99) - Add
optionproperty toFFmpegFrameGrabberto let users set such things as "analyzeduration", "probesize", or "list_devices" - Fix "AVFrame.format is not set" and "AVFrame.width or height is not set" warning messages (issue #76)
- Upgrade support to OpenCV 2.4.10
- Upgrade supported FFmpeg API to the 2.5 release branch
- Fix
time_basewarnings displayed byFFmpegFrameRecorder(issue #75) - Add new
TemplateMatchingsample, thanks to Waldemar Neto - Update instructions in the
README.mdfile for manual installation in Android Studio - Replace deprecated
CvMatandIplImagefunctionality used in theDemoclass with newIndexerAPI, and provide samplepom.xmlfile for Maven - Make
FFmpegFrameGrabber.getFrameRate()returnAVStream.avg_frame_rateinstead ofr_frame_rate(issue #63) - Disable DocLint, which prevents the build from succeeding on Java 8 (issue bytedeco/javacpp#5)
- Add
FlyCapture2FrameGrabberwith cross-platform support of FlyCapture2 (pull #45) - Fix issue that would prevent
CanvasFramefrom working on Mac OS X with recent versions of the JDK (issue #39 and issue #314) - Upgrade
RecordActivitysample with a continuous record loop, thanks to Federico Sendra and Juan Manuel Sobral - Make
FrameGrabber.createDefault()throw an exception on unsupported input, instead of returning a crypticnull(issue #30) - Add
videoCodec,videoBitrate,audioCodec, andaudioBitrateproperties toFrameGrabber - Work around
avcodecandavdevicenot loading properly forFFmpegFrameGrabberandFFmpegFrameRecorder(issue #24) - Do key frame detection in
FFmpegFrameRecorderbased onAVPacket, notAVPicture(pull #20)
- Remove
platformproperty frompom.xml, replaced with theplatform.dependencyone in JavaCPP Presets (issue #10) - Add new
RLSAsample, thanks to Nicholas Woodward (issue #469) - Fix a timestamp rounding issue in
FFmpegFrameGrabberthat causessetFrameNumber()to sometimes pick the wrong frame if FPS is not a proper divisor of 1000000 (issue #5) - Increase the flexibility of the
pom.xmlfile by making it possible to specify a custom version of JavaCPP - Add missing dependencies for JogAmp in the
pom.xmlfile (issue #2) - Add new
OpenCVFaceRecognizersample, thanks to Petter Christian Bjelland - Add new
OpticalFlowDensesample, thanks to Dawit Gebreyohannes (issue #468) - Make it easier to try out the
FaceRecognition.javasample (issue #1)
- Move from Google Code to GitHub as main source code repository
- Upgrade support to OpenCV 2.4.9
- Upgrade supported FFmpeg API to the 2.2 release branch
- Fix
FFmpegFrameRecordernot refreshing the resampler when the format of samples changes (issue #465) - Rename the
com.googlecode.javacv.cpppackage toorg.bytedeco.javacpp, andcom.googlecode.javacvtoorg.bytedeco.javacv - Removed old NetBeans project files that cause a conflict when trying to open as a Maven project (issue #210)
- Adjusted the samples a bit because of small changes in the API with the move to the JavaCPP Presets
- Fixed
ObjectFindernot working with recent versions of OpenCV, especially on Android (issue #214) - Added new
FrameRecorder.gopSizeproperty to let users set a desired GOP size instead of the default one of 12 FFmpegFrameGrabbernow takes into account calls tosetPixelFormat()(issue #429), but does not enforce it- Added a
Frame.audioChannelsfield for resampling purposes inFFmpegFrameRecorder(issue #388) - In
FFmpegFrameRecorder, fixed audio encoding with the Vorbis codec (issue #428) and the WebM container (issue #435), and other audio related things - Added missing
allocateArray()constructors toCameraParamsandMatchesInfo(issue #421) - Fixed errors such as "jniopencv_nonfree.dll: Can't find dependent libraries" by adding the
opencv_oclmodule as dependency - Added support to seek in audio-only streams with
FFmpegFrameGrabber.setTimestamp()(issue #417) - Fixed potential thread concurrency issues and crash in the
stopRecording()andonDestroy()methods of theRecordActivitysample, thanks to Jacob Duron - To capture the last frame of a video file, reverted
FFmpegFrameGrabber.setTimestamp()to its previous behavior (issue #413) - Updated
samples/FaceApplet.jnlpto make it work with JDK/JRE 7u45
- Upgraded support to OpenCV 2.4.8
- Upgraded supported FFmpeg API to the 2.1 release branch
- Updated
freenectto reflect the latest changes of OpenKinect's master branch - Updated
videoInputto reflect the latest changes in the "update2013" branch - Added
Frame.opaquefield to give access to the rawAVFramein the case ofFFmpegFrameGrabber(issue #399) - Added new
FFmpegFrameGrabber.grabKeyFrame()method to grab key frames (I-frames) directly (issue #312) VideoInputFrameGrabbernow uses 640x480 as default image size to prevent "videoInput.getPixels() Error: Could not get pixels."- Fixed
FFmpegFrameGrabber.setTimestamp()not working for streams with audio (issue #398) - Fixed wrong
haarcascade_frontalface_alt.xmlfile getting downloaded by theDemoclass (issue #402) - Added a
Frame.sampleRatefield to allow audio samples to be resampled byFFmpegFrameRecorder(issue #388) - Incorporated
IPCameraFrameGrabberfrom Greg Perry (issue #384) - Fixed thread safety issues with FFmpeg in
FFmpegFrameGrabberandFFmpegFrameRecorder(issue #377) - Fixed memory leak in the
MotionDetector.javasample file (issue #372) - New
videoCodecNameandaudioCodecNameproperties to allow users ofFFmpegFrameRecorderto use codecs such as "libx264rgb" (issue #369)
- Upgraded supported FFmpeg API to the 2.0 release branch (with Java interface files now based on code automatically produced by JavaCPP Presets)
- Fixed
FFmpegFrameGrabber.getFrameNumber() - Upgraded support to OpenCV 2.4.6
- Fixed callbacks when used with custom class loaders such as with Web containers
- Upgraded to ARToolKitPlus 2.3.0 (issue #234)
- Fixed drawing issues with
MarkerDetector.draw() - Fixed
FFmpegFrameGrabber.getTimestamp()not returning values for audio frames (issue #328) - Added new
Frame.keyFramefield returned byFFmpegFrameGrabber.grabFrame()to know when a grabbed frame is a key frame or not (issue #312) - Worked around problem in
samples/RecordActivity.javathat would happen when trying to record a frame with an invalid timestamp (issue #313) - Fixed potential resource leak that could occur after
FFmpegFrameRecorderthrowing anException - Fixed
FFmpegFrameGrabbernot returning the last few frames of video streams (issue #315) - Fixed wrong dependencies of OpenCV preventing correct loading (issue #304)
- Renamed
FrameRecorder.record(Buffer[] samples)to a cleanerrecord(Buffer ... samples)(issue #303) - Fixed
FFmpegFrameRecordernot flushing buffers onstop()(issue #302)
- Upgraded support to OpenCV 2.4.5
- Upgraded supported FFmpeg API to the 1.2 release branch
- New methods
FFmpegFrameRecorder.setVideoOption()andsetAudioOption()generalize the way to set arbitrary codec options, such as "profile", "preset", "tune", etc. used by the x264 codec - Included better format guessing inside
FFmpegFrameRecorderfor protocols like RTP - Added support for planar audio formats to
FFmpegFrameGrabberandFFmpegFrameRecorder, as required by newer versions of FFmpeg for at least MP3 and AAC - Enhanced
FFmpegFrameRecorderby making it use the closest supported frame rate for the given codec instead of failing - To support variable bitrate (VBR) encoding, appended new
videoQualityandaudioQualityproperties toFFmpegFrameRecorder, which usually have an effective range of [0, 51] and overrides thevideoBitrateandaudioBitrateproperties
- Upgraded support to OpenCV 2.4.4
CanvasFrame.waitKey(-1)does not wait anymore and returns the lastKeyEventdispatched since the last call to it- Upgraded supported FFmpeg API to the 1.1 release branch
- Fixed bug in
FaceRecognition.javasample (issue #276) - Included
Sobel(),Scharr(),Laplacian(), andCanny()fromopencv_imgprocwhose equivalent functions in the C API have missing parameters - Extended
OpenKinectFrameGrabberwithsetDepthFormat()andsetVideoFormat()methods to be able to set both formats independently (issue #273) - Fixed
Blender.blend()having its@OutputMatincorrectly annotated as@InputMat(issue #272) - Added new
RecordActivity.javaAndroid sample from Shawn Van Every and Qianliang Zhang - Added missing
allocate()methods forFunctionPointerinAVIOContextand others, which prevented these FFmpeg callbacks from functioning - Fixed infinite loop in
FrameGrabber.Array.grab()(as used by ProCamCalib in the case of stereo cameras, issue #262) whenFrameGrabber.getTimestamp()returns an invalid negative value (as withopencv_highgui) or when using different types of (unsynchronized)FrameGrabbertogether - Fixed
cvQueryHistValue_1D()and other functions that use a rawCvArrobject - Fixed problem when subclassing
CanvasFrame
- Upgraded support to OpenCV 2.4.3 (issue #233)
- Fixed functions like
Algorithm.getMat()andHOGDescriptor.getDefaultPeopleDetector()returningnullinstead of the expected data - Implemented better, more transparent, handling of
cv::Ptr - When allocating an empty
IplImage,CvMat,CvBGCodeBookModel, etc. its memory content now gets zeroed out, giving OpenCV a better chance of displaying an error message instead of crashing - Upgraded supported FFmpeg API to the 1.0 release branch
- Appended to
StringVectorandMatVectornew convenient bulk constructors andput()methods taking arrays ofString,IplImage,CvMat, etc. - Included new
Blobsmodule from David Grossman and the correspondingBlobDemosample - Added missing
opencv_core.partition()function (issue #144) - Fixed up the samples a bit (issue #229 and issue #230)
- Switched the majority of
@Adapterannotations to more concise ones like@StdVectoras allowed by new capabilities of JavaCPP - Fixed
FFmpegFrameGrabber.getLengthInFrames()andOpenCVFrameGrabber.getLengthInTime()(issue #231 and issue #236) - Enhanced
FFmpegFrameRecorderto support conversion between audio sample formats (for the experimental AAC encoder among other things) and to let two different threads callrecord(samples)andrecord(image)simultaneously, plus a couple of other features likesetFrameNumber(), which lets users skip image frames (achieving variable frame rate) - Added a
javacpp.skipproperty topom.xml, such that a command likemvn package -Pall -Djavacpp.skip=trueonly recompiles the Java source files, but also addedplatform.rootandcompiler.pathproperties, which map directly to JavaCPP's for convenience
- Provided new
javacv-linux-arm.jarbuild thanks to Jeremy Nicola (issue #184) - Additional default properties inside
pom.xmlmake it easier to build JavaCV from source (issue #202), callingmvn packagenow succeeds with only OpenCV and a C++ compiler for JavaCPP - Made a few minor updates for OpenCV 2.4.2
- New
Pointer.limitproperty of JavaCPP can now be used to get thesizeof an output parameter, and to specify the maximumsizeon input as well - Upgraded supported FFmpeg API to the 0.11 release branch
- Added audio support to
FFmpegFrameGrabber(callgrabFrame()instead ofgrab()) andFFmpegFrameRecorder(callsetAudioChannels()beforestart(), andrecord(Frame)instead ofrecord(IplImage)) (issue #160) - Gave better default
FFmpegFrameRecordersettings to H.263, MPEG-4, etc. codecs and fixed H.264 encoding with libx264 (issue #160) - Refined the
FaceAppletsample - Fixed
FlannBasedMatcherconstructor,FaceRecognizer.train(), andStitcher.stitch()/composePanorama()(issue #211) - Fixed
CanvasFramesometimes blanking out under Windows and maybe Linux (issue #212)
- Started using version numbers, friendly to tools like Maven, and placing packages in a sort of Maven repository
- JavaCV can now extract and load native dependent libraries such as
libopencv_core.so.2.4,libopencv_core.2.4.dylib,opencv_core240.dll, etc. from Java resources placed inside thecom.googlecode.javacv.cpp.<platform.name>package (i.e.: under the/com/googlecode/javacv/cpp/<platform.name>/directory of a JAR file in the classpath) (issue #146) - Included new
FaceAppletsample to demonstrate How to use JavaCV in an applet - Added handy
IplImage.asCvMat()andCvMat.asIplImage()conversion methods - Fixed a few small things with
OpenCVFrameGrabber,opencv_contrib,opencv_legacy, andopencv_stitching
- Upgraded support to OpenCV 2.4.0 (issue #187)
- Moved the source code repository to Git
- Added
pom.xmlfile for Maven support and changed the directory structure of the source code to match Maven's standard directory layout - Made it easier to create one massive statically linked native library by passing something like "-Xcompiler -Wl,-static -o javacv" as command line options to JavaCPP, usually from inside
build.xmlorpom.xml(issue #146) - Fixed missing parameter from
CvANN_MLP.create() - Added methods
cvCalcCovarMatrixEx(),cvEigenDecomposite(), andcvEigenProjection()taking anIplImage[]as argument for convenience VideoInputFrameGrabber.start()now accepts aconnectionargument such asVI_COMPOSITEto support analog cameras and what not- Fixed
FaceRecognitionsample (issue #188) - Added a few convenience methods to avoid the need to create empty
CvAttrList
- Added missing array allocators and
position()methods toKDTree.Node,DefaultRngAuto,CvAffinePose,KeyPoint,BaseKeypoint,ReferenceTrees,DMatch,*.Params,CvFuzzy*,Octree.Node,CvDefParam,Cv*Blob*,Cv*Track*,CvDrawShape,CvVectors,CvParamGrid,Cv*Params,CvSVM*,CvPair16u32s,CvDTree*CvTrainTestSplit,CvMLData,FeatureEvaluator, and*DataMatrixCode - Increased versatility of
IplImage.createFrom(),copyFrom(),copyTo(),getBufferedImage()by providing aflipChannelsparameter, whose effect was previously mistakenly forced onto four-channel images of byte values only (issue #163) - Fixed a couple of things with
CvMat.get()/put()(issue #167) - In addition to an
IplImage, we may now specify the pixel format of the data when callingFFmpegFrameRecorder.record(), but otherwise whenIplImage.nChannels == 2, it assumesPIX_FMT_NV21, allowing for easy and efficient encoding of data captured from the camera on Android (issue #160), image objects we can also convert to RGB usingcvCvtColor()withCV_YUV420sp2BGR - Fixed seeking capabilities of
FFmpegFrameGrabber(issue #162) and addedgetLengthInFrames()andgetLengthInTime()methods to query the duration of streams, when known - Enhanced
IplImage.clone()andcreate*Compatible()with cloning of theirBufferedImageto make it easier to keep color components in the right order (issue #163) - Refactored
FrameGrabberandFrameRecordera bit to accommodate newcreateDefault(...)andcreate(String className, ...)factory methods, offering to users an easier selection method to work around limitations of some APIs (issue #70) - Adjusted
GNImageAligner,ProCamTransformer, etc. to support alignment of only the projector display on textureless surface planes - Renamed a few more
Settingsproperties to reflect better their meanings
- Added
GLCanvasFrameto show OpenGL renderbuffers on screen, plus a new factory methodJavaCVCL.createCLGLImageFrom()to create compatible ones fromIplImageobjects, as well as more user-friendlygetGLContext(),getGL()andgetGL2()methods - Fixed various things of the original
CanvasFrame, andJavaCV.createCLImage()andcreateIplImage(), also appendingFromto their names - New
createPinnedBuffer()andcreatePinnedIplImage()factory methods inJavaCVCLto allocate page-locked memory for faster CPU<->GPU transfers, but it does not seem to work for OpenCL image objects, only linear buffer objects :( - Fixed and enhanced
GNImageAlignerCLandProjectorDevice(itsuseOpenGLproperty) to support fully OpenCL and OpenGL acceleration - Refactored
Parallela bit so that we may set the number of threads it uses via its staticnumThreadsproperty or the "com.googlecode.javacv.numthreads" system property, which defaults toParallel.getNumCores() = Runtime.getRuntime().availableProcessors() - Cleaned up and renamed some methods in
JavaCV, while addingboundingRect(), functionally similar tocvBoundingRect, but better adapted to compute a properly aligned and padded ROI - Inserted a couple of missing
allocate()insideopencv_flann - Updated
ObjectFinderwith aSettings.useFLANNproperty to let it use FLANN via OpenCV - Cleaned up and optimized
HandMouse CanvasFrame,FrameGrabber,FrameRecorder, andProjectiveDeviceobjects now throwExceptionobjects of a nested class instead of the too genericjava.lang.Exceptionone- Moved parallel execution of
cvkernels.multiWarpColorTransform(), modifyingImageTransformerclasses, fromGNImageAlignerintocvkernels, which now also supports other image types thanfloat - Renamed some
Settingsproperties here and there to correct typos and reflect better their meanings - Updated
freenectto reflect the latest changes of OpenKinect's master branch - FFmpeg and other libraries did not work under Android when compiled with the latest NDK, r7 (issue #147): Fixed in JavaCPP
- Moved
IplImage.timestamptoFrameGrabber, also adding aframeNumberproperty, both allowing to seek within streams too - Removed
triggerFlushSizeproperty fromCameraDeviceandFrameGrabber, instead relying on thenumBuffersproperty to decide the required size of a buffer flush - Corrected the logic behind
FFmpegFrameGrabber.getFrameRate()andgetTimestamp()(issue #151) - Created a
BufferRingclass for convenient circular rings of large buffers that require manual release of resources, such as OpenCL memory - Added a few more useful methods to
FrameGrabber, includingrestart(),flush(), anddelayedGrab()(to be used in conjunction withgetDelayedTime()andgetDelayedImage()) - Inserted
cvLoadImageBGRA()andcvLoadImageRGBA()methods intoopencv_highguito load color images compatible with OpenCL more easily JavaCvErrorCallbacknow outputs messages toLoggerinstead ofSystem.err- Defined
VI_COM_MULTI_THREADEDforvideoInput, allowing it to run on multiple threads if needed
- JavaCV should now have an easier time automatically finding libraries inside standard directories such as
/usr/local/lib/,/opt/local/lib/, andC:\opencv\, even when they are not part of the system configuration or PATH (issue #127) - Renamed
set()andfill()methods toput()insideCvPoint*classes, for better naming consistency - Renamed
FrameGrabber.ColorModetoImageModeand itsBGRvalue toCOLORto reflect the fact that aFrameGrabberinstance can return color images in some arbitrary format, but added a newpixelFormatproperty to let users know or specify the exact pixel format desired, such asPIX_FMT_BGR24, etc. in the case ofFFmpegFrameGrabber - After
FFmpegFrameGrabber.start(), theformat,imageWidth,imageHeight, andframeRateproperties switch to their effective values - Added new
FrameGrabber.sensorPatternproperty to obtain the Bayer filter layout of raw data fromDC1394FrameGrabberandFlyCaptureFrameGrabber - Readded to
KDTree,Index, andHOGDescriptorsome functions withFloatPointerandIntPointerarguments that were mistakenly removed when OpenCV switched to usingcv::InputArrayandcv::OutputArrayparameter types (issue #134) - Renamed
ProjectiveGainBiasTransformertoProjectiveColorTransformer - Added a few classes to do some processing using OpenCL and OpenGL:
JavaCVCL,GNImageAlignerCL,ProjectiveTransformerCL,ProjectiveColorTransformerCL, andProCamTransformerCLwith some other related files - Renamed
Parallel.numCoresto the more conventionalParallel.NUM_CORES - Added new
FaceRecognition.javasample from Stephen L. Reed - Inserted a couple of missing calls to
Loader.load()(issue #142) - Improved hacks for
Loader.load()in JavaCPP make JavaCV work on Android 4.0 - New
PS3EyeFrameGrabberfrom Jiri Masa can now grab images using the SDK from Code Laboratories
- Fixed
DC1394FrameGrabberandFlyCaptureFrameGrabberto behave as expected with all Bayer/Raw/Mono/RGB/YUV cameras modes (within the limits of libdc1394 and PGR FlyCapture) (issue #91) - Fixed regression of
IplImage.copyFrom()andcreateFrom()withBufferedImageobjects ofSinglePixelPackedSampleModel(issue #102) - C++ functions using
std::vectorobjects as output parameters now work on Windows Vista and Windows 7 as well
- Upgraded support to OpenCV 2.3.1
- An output argument of type
cv::Matorcv::OutputArrayreturned with a size 0 now correctly setsCvArr.address = 0 - Fixed
IplImage.createFrom()andcopyFrom()when called on objects returned byBufferedImage.getSubimage() - Added missing allocator to
CvRNG OpenCVFrameGrabbernow detects when CV_CAP_PROP_POS_MSEC is broken and gives up callingcvGetCaptureProperty()- New
OpenKinectFrameGrabber.grabDepth()andgrabVideo()methods to capture "depth" and "video" simultaneously, regardless of the mode
- Upgraded support to OpenCV 2.3.0
- Fixed
OpenKinectFrameGrabber, which can now also capture depth images whensetFormat("depth")is called beforestart() - Fixed
CvMatArrayandIplImageArrayas well as histogram related functions - Fixed
FFmpegFrameGrabber, andFFmpegFrameRecordernow works on Android also - Fixed calls, such as
opencv_flann.Index.knnSearch(), that require aMatAdapteror anArrayAdapterfor output
- New
freenectwrapper and correspondingOpenKinectFrameGrabberto capture from Microsoft's Kinect stereo camera using OpenKinect - JavaCV now exposes all C++ functions and classes of OpenCV not covered by the C API
- Fixed various erroneous declarations and calls, including those due to changes in JavaCPP
- Removed
CvMatobject pooling in favor of more efficientThreadLocalobjects created byCvMat.createThreadLocal() - Changed
Marker.getCenter()back to the centroid, because it has better noise averaging properties and gives in practice more accurate results than the actual center - Added hack to
OpenCVFrameGrabber.start()to wait forcvRetrieveFrame()to return something else thannullunder Mac OS X - FFmpeg now works properly on Windows and Android (issue #63) with newer binaries
- New
videoInputLibwrapper and correspondingVideoInputFrameGrabberto capture using DirectShow, useful under Windows 7 where OpenCV and FFmpeg can fail to capture using Video for Windows (issue #58) GeometricCalibratornow reports the maximum errors in addition to the average (RMS) errors
- Added a
formatproperty toCameraDevice,FrameGrabber, andFrameRecorder, mostly useful forFFmpegFrameGrabber, where interesting values include "dv1394", "mjpeg", "video4linux2", "vfwcap", and "x11grab" OpenCVFrameRecordernow usesCV_FOURCC_PROMPTunder Windows as default sinceCV_FOURCC_DEFAULTcrashes (issue #49)- Added hack to make sure the temporarily extracted library files get properly deleted under Windows
- JavaCPP now loads classes more lazily
- Fixed most occurences of
UnsatisfiedLinkError(issue #54), but some corner cases may require a call toLoader.load()on the class one wishes to use - Added (rudimentary) outlier detection and modified zero threshold handling in the image alignment framework
- New
JavaCV.hysteresisThreshold()feature - New
HandMousefunctionality, which depends on the image alignment framework - Fixed
ProjectiveDevice.distort(), which mistakenly undistorted images instead - New
HoughLinessample thanks to Jeremy Nicola
- Switched from JNA to JavaCPP, which has a lower overhead and supports C++, bringing hope that future versions of JavaCV will support features of OpenCV available only through the C++ API
- Consequently, the syntax of various operations have changed a bit, but the transition should not be too painful
- As a happier consequence, this also fixes the problem with SSE instructions on 32-bit x86 (issue #36)
- Also, JavaCPP does not have any limitations or performance issues with large data structures (issue #10 and issue #14)
- Added support for OpenCV 2.2 (issue #42), but dropped support for all previous versions
- Added samples provided by users (issue #1, issue #45, and issue #46)
- Added deinterlace setting to
FFmpegFrameGrabberhaving it callavpicture_deinterlace()(issue #38) - Enhanced a few things of the image alignment algorithm
- Tried to fix image format conversion inside
FlyCaptureFrameGrabber, but this is going to require more careful debugging - Fixed and added various other things I forget
- Now works on Android with the Dalvik VM (for more details, please refer to the FacePreview sample available on the download page)
- Added more hacks to
CanvasFramein the hope to make it behave better outside the EDT - Made clearer the error messages thrown from
FrameGrabberobjects, whenstart()may not have been called - Fixed version specific declarations of
CvStereoBMStateand related functions - Fixed conditions that could crash
cvkernels
- Renamed the package namespace to
com.googlecode.javacv, which makes more sense now that JavaCV has been well anchored at Google Code for more than a year, piggybacking on the unique and easy-to-remember domain name - Included new FFmpeg wrapper classes
avutil,avcodec,avformat,avdevice,avfilter,postprocess, andswscale, eliminating the need of the separate FFmpeg-Java package CanvasFramenow redraws itsCanvasafter the user resizes theFrame- Fixed the
Errorthrown when callingCanvasFrame.showImage()from the EDT - Added check to
DC1394FrameGrabberso that a "Failed to initialize libdc1394" does not crash the JVM FFmpegFrameGrabberdoes not crash anymore when forgetting to callstart()before agrab()ortrigger()FrameGrabbernow selects the default grabber a bit better- Made sweeping changes (for the better, but still not finalized) to
GNImageAligner,ProjectiveTransformer,ProjectiveGainBiasTransformer, andProCamTransformer... - Added to
JavaCVmore methods related to transformation of planes:perspectiveTransform(),getPlaneParameters(),getPerspectiveTransform(), andHtoRt(), as well asProjectiveDevice.getFrontoParallelH() - Added a static
autoSynchflag to allStructureclasses ofcxcore,cv, andcvaux, which you may set tofalseprior to the return of things like big and heavyCvSeqto make them load faster and to avoid stack overflows, but accessing fields will then require manual calls toreadField()andwriteField()(issue #10 and #14) - Added missing
ByValuesubclasses toCvSeq,CvSet,CvContourTree, andCvChain... Any others missing? - Fixed
Exceptionthrown fromcvCreateHist()under JNA 3.2.7 (issue #26) - Enhanced
CvMat.put(), which now supports setting submatrices - Improved inside
IplImagethe support ofBufferedImage, especially those using aDirectColorModel(issue #23) - Fixed crash in
cvkernelswhen color transformationXisnull
- Fixed crash that would occur in
CanvasFramefor some video drivers FFmpegFrameGrabbernow supports other input formats (devices), such asx11grabthat can be used for screencasting- Added
JavaCV.median()function, andJavaCV.fractalTriangleWave()now respects image ROI - Fixed background subtraction in
cvaux - Fixed crash inside the code for direct alignment caused by the ROI getting set outside the image plane
- Added
deltaScaleandtryToFixPlanetoGNImageAligner.Settings(the first used inImageTransformer.Parametersas increment, randomly selected forward or backward, for finite difference), which sometimes help to jump over local minima
- Removed redundant
CvMemStorage.clearMem()method, usecvClearMemStorage() - Fixed the sample
Test2class that did not work under Windows - Fixed corruption by the
cvkernelstransformerat the borders - Modified
CanvasFrameconstructors and added agammaargument used byshowImage(IplImage) CanvasFramenow lets users resize the frame, while displayed images are stretched to fit the new size- Renamed
CanvasFrame.acquireGraphics()tocreateGraphics()for consistency - When
FlyCaptureFrameGrabbercannot set fastest speed, it now safely fails by setting any supported speed - Added a new
Parallel.loop()method that can use more threads than the number of CPU cores detected - Added new
numThreadsproperty toGNImageAlignerand fixed a few minor inconsistencies as well - Fixed incorrect
Java.HnToRt(), and added a fewnorm()andrandn()methods - For functions with
float[]anddouble[]arguments incvauxandcv, added complementaryFloatBufferandDoubleBufferdeclarations - Fixed loading problems with
cvaux - Fixed and enhanced histogram, back projection, and other CAMSHIFT related functionality
- Added code for
CvRNG - Added "/opt/local/lib/" and "/opt/local/lib64/" (standard on Mac OS X) to the default list of search paths for OpenCV
- Added
CvScalar.getVal()andCvIntScalar.getVal(), which simply return thevalfield, convenient for Scala wherevalis a reserved word - Fixed the construction of
IplImagefrom aPointer - Removed incorrect cases when an
IplImagegets converted to aBufferedImage.TYPE_CUSTOM - Made
CvArr.PointerByReferencea bit more consistent and general
- Modified
IplImage,FrameGrabber, andCanvasFrameto get better default behavior of gamma correction - Fixed
cv.CvHistogramand related histogram functions CameraDevice.Settings.triggerFlushSizenow defaults to 5 (only affectsOpenCVFrameGrabberandFFmpegFrameGrabber)- Replaced
LMImageAlignerbyGNImageAligner, a more appropriate name for Gauss-Newton withlineSearch - Fixed a few things related with
ProjectiveDevice.Settings
- Added support for OpenCV 2.1
- Fixed up
clone()methods to avoid the need to cast - Removed the
fullScreenargument fromCanvasFrameconstructors, which will now switch to full-screen mode only when ascreenNumberis explicitly passed - Renamed
FrameGrabber.ColorMode.GRAYSCALEtoGRAY - Replaced deprecated functions from
FFmpegFrameGrabberandFFmpegFrameRecorder FFmpegFrameGrabbercan now resize images
- Added new classes and methods used by ProCamTracker:
cvkernels,JavaCV.fractalTriangleWave(),ImageAligner,LMImageAligner,ImageTransformer,ProjectiveTransformer,ProjectiveGainBiasTransformer,ProCamTransformer, andReflectanceInitializer CameraDevice.Settingshas a newdeviceFileproperty (used by aFrameGrabber), which brings up a file dialog for somePropertyEditors- Moved in
CameraSettings,ProjectorSettings, andFrameGrabber.PropertyEditorfrom theprocamcalibpackage - Added to
CameraDevice.SettingsandFrameGrabberatriggerFlushSizeproperty to indicate the number of buffers to flush ontrigger()to compensate for cheap cameras that keep old images in memory indefinitely - Changed the type of
CameraDevice.Settings.deviceNumbertoIntegerso we may set it tonull - Fixed and enhanced
CanvasFrame.showImage()methods a bit - In
triggerModeDC1394FrameGrabbernow tries to use a real software trigger and only falls back to one-shot mode on error - Fixed array constructors of
IplImage.PointerByReference()andCvImgObsInfo.PointerByReference() - Added
CvPoint.fillArray()methods to reuse preallocated arrays and changedcreateArray()a bit as well - Fixed and enhanced all
IplImage.copy*()methods, including new support for ROIs and subimages, which affectscreate*()andgetBufferedImage()methods as well - Updated
Markerto support different size and spacing in X and Y - Added
SettingstoObjectFinder - Fixed distortion problem in
ProjectiveDeviceandProCamColorCalibratorwith OpenCV 1.1pre1 - Split
ProjectiveDevice.SettingsintoProjectiveDevice.CalibrationSettings(for applications like ProCamCalib) andProjectiveDevice.CalibratedSettings(for applications like ProCamTracker) - Renamed
gammatoresponseGammainProjectiveDevice, and moved previousnominalDistanceparameter toSettings - Added
ProjectiveDevice.rescale()to rescale calibration parameters when switching a device to a new image size ProjectiveDevice.undistort()anddistort()can nowuseFixedPointMapsof OpenCVProjectiveDeviceand its subclasses nowthrow new Exception()if theparameterFilecannot be read
- Relicensed JavaCV under the GPLv2 with Classpath exception (see LICENSE.txt). Please note that if your application links with code that needs ARToolKitPlus, for example, it will become subject to the full GPL, without Classpath exception
- Added
devicePathsetting toCameraDevicethat works withFFmpegFrameGrabber,OpenCVFrameGrabber, and otherFrameGrabberwith a String constructor - Added "C:/OpenCV2.0/bin/release/" to the directory list to search for OpenCV DLLs
- Moved
cvFindHomography(),cvFindExtrinsicCameraParams2(),cvReprojectImageTo3D(),cvSaveImage(), andcvRetrieveFrame()to version specific classes since their number of arguments differ with the version of OpenCV - Enhanced
CvMat.put(CvMat mat)to work better even when the matrices are not actually compatible - Added new
IplImagefactory methodscreateCompatible(IplImage image),createIfNotCompatible(IplImage image, IplImage template), andcreateFrom(BufferedImage image) - Fixed
distortionCoeffscorruption that might occur inProjectiveDevice
- Added wrapper for the
cvauxmodule of OpenCV - Added abstract
FrameRecorderclass and aOpenCVFrameRecorderclass - Fixed read() problem that might occur within Pointer constructors
- Running
java -jar javacv.jarnow displays version information
- Fixed
CanvasFramefrom getting stuck in a maximized window - Removed all
setAutoWrite(false)fromcxcorenow that the bug appears fixed in JNA - Added
FFmpegFrameGrabberandFFmpegFrameRecorderto easily record live footage and grab back offline into JavaCV
- Added more convenient constructors and factory methods for
CvPoint*,CvSize*,CvRect,CvTermCriteria,CvSlice, andCvAttrList - Added R2 correlation coefficient field to
ProjectiveDevice - Enhanced and fixed color conversion spaghetti code in
FlyCaptureFrameGrabber - Fixed the
CvHaarFeatureStructure - Renamed
CvIntScalarfactory methods to match withCvScalar - Enhanced and fixed some problems with gamma correction in
IplImage - Added a
highgui.CV_FOURCC()method that takes chars as parameter - Moved
MarkedPlane.drawMarkers()toMarker.draw()for better code reuse - Added
MarkedPlane.getTotalWarp()with a "useCenters" parameter - Changed default values of
MarkerDetector.binarizationKWhiteMarkersto 1.0 andProjectorDevice.brightnessBackgroundto 0.0 - Fixed issue with image width and memory alignment in
MarkerDetector Marker.getCenter()now computes the actual physical center instead of the centroidOpenCVFrameGrabber.getDeviceDescriptions()now throwsUnsupportedOperationException- Added support in
OpenCVFrameGrabberto grab frames from video files - Added
ProjectiveDevice.getRectifyingHomography()method - Added
JavaCvErrorCallbackto easily catch errors of OpenCV in Java
- Moved the functionality of
CvMatPoolto theCvMat.take()and.pool()methods - Added color calibration for projector-camera systems (
ProCamColorCalibrator) - Updated
DC1394FrameGrabberto handle more conversion use cases automatically - Fixed
CvIntScalarto mirrorCvScalar
- Change of plan: JavaCV now works with any of OpenCV 1.0, 1.1pre1, or 2.0! Version specific functionality is enclosed in subclasses, e.g., the class
cv.v20can access everything from thecvmodule of OpenCV 2.0 - Added a few missing functions and adjusted some mappings to make them closer to the C API
- Added a few more helper methods to
CvPoint* - Added temporary storage to
ObjectFinderto plug the memory leak
- Fixed problem when loading distortion coefficients with
ProjectiveDevice - Added automatic read and write for functions with arrays of
StructureorPointerByReference - Added to
cv.javaa few missing functions related to calibration - Fixed up a bit helper methods for
CvPoint*,CvScalar,CvRect,CvBox2D,CvMat,IplImage,CvMemStorage,CvSeq, andCvSeqBlock - Added
CvMatPooltoMarkedPlaneandMarker - Added a few new
distort()methods toProjectiveDevice - Last version to support OpenCV 1.1pre1: Future version will require OpenCV 2.0
IplImagenow flips the buffer on copy if necessary- Added needed Pointer constructor for
CvSURFPointandCvConvexityDefect - Cleaned up a bit the messy Buffers in
CvMat
- Added
get*Buffer()functions toIplImage - Added more options for gamma correction in
IplImageandProjectiveDevice - Further cleaned up the namespace and constructors of
ProjectiveDevices CanvasFrame.waitKey()now only checksKeyEvent.KEY_PRESSED- Added
CvMatPoolto avoid recreating matrices - Moved
CvScalarfunctions tocxcore
- Switched to using
import staticfor relief from namespace hell - Fixed color channel reversal of Bayer images in
DC1394FrameGrabber
Initial release
This project was conceived at the Okutomi & Tanaka Laboratory, Tokyo Institute of Technology, where I was supported for my doctoral research program by a generous scholarship from the Ministry of Education, Culture, Sports, Science and Technology (MEXT) of the Japanese Government. I extend my gratitude further to all who have reported bugs, donated code, or made suggestions for improvements (details above)!