- Update the
JavaCV
class with appropriate documentation comments (issue #444) - Fix Javadoc links for externally referenced classes
- Fix seeking when calling
FFmpegFrameGrabber.setTimestamp()
on audio-only files - Add more appropriate default pixel formats for JPEG formats in
FFmpegFrameRecorder
(issue #410)
- Optimize
AndroidFrameConverter
a bit and add a test (pull #379) - Fix
DC1394FrameGrabber
on the Windows platform (issue bytedeco/procamcalib#4) - Support
AVPacket
inFFmpegFrameGrabber
andFFmpegFrameRecorder
to copy without re-encoding (issue #93) - Lower Maven prerequisite in the
pom.xml
file to 3.0 (issue bytedeco/javacpp#93) - Add new
PrincipalComponentAnalysis
sample (pull #373) - Upgrade
OpenCVFrameRecorder
to use the new C++VideoWriter
API (pull #370) - Upgrade
OpenCVFrameGrabber
to use the new C++VideoCapture
API (pull #361) - Add
CaffeGooglenet.java
sample for theopencv_dnn
module (pull #341) - Clean up
IPCameraFrameGrabber
and fix incorrectly reading some headers (pull #323, pull #345) - Fix swallowed
InterruptedException
and throw appropriate exception inFrameGrabber.start()
(issue #315) - Fix
IPCameraFrameGrabber.stop()
not checking for null (pull #300) - Upgrade dependencies for OpenCV 3.1.0, FFmpeg 3.0.2, FlyCapture 2.9.3.43, libdc1394 2.2.4
- Let users call
FFmpegFrameFilter.push(null)
to indicate EOF, as required by some filters like "palettegen" (issue #287) - Call
cvHaarDetectObjects()
withCV_HAAR_FIND_BIGGEST_OBJECT | CV_HAAR_DO_ROUGH_SEARCH
instead ofCV_HAAR_DO_CANNY_PRUNING
in the face detection samples to get acceptable performance with OpenCV 3.0 (issue #272) - Change
WakeLock
forkeepScreenOn
inAndroidManifest.xml
file and addsetPreviewDisplay()
call onsurfaceChanged()
event for theRecordActivity
sample (pull #269, pull #271)
- Make
FrameConverter
for images returnnull
whenFrame.image == null
(issue #249) - Add
FFmpegLogCallback
to redirect easily to Java log messages from FFmpeg - Upgrade all Maven dependencies and plugins to latest versions, thus bumping minimum requirements to Java SE 7, Android 4.0, and Maven 3.0
- Fix broken
FFmpegFrameGrabber.grabImage()
aftersetTimestamp()
(issue #236) - Add
FFmpegFrameGrabber.grabSamples()
to grab only audio samples, and ignore video frames (issue #235) - Fix broken
setVideoCodecName()
andsetAudioCodecName()
forFFmpegFrameRecorder
(issue #229) - Remove
FaceRecognition.java
sample, which requires the deprecatedopencv_legacy
module (issue #200) - Fix potential crash in
ObjectFinder
with FLANN (issue #210) - Add
FFmpegFrameFilter
to let users processFrame
images withlibavfilter
easily (issue #164) - Add
FaceRecognizerInVideo.java
sample that does a combo of face detection and recognition (issue #203) - Return
AVStream.r_frame_rate
whenAVStream.avg_frame_rate
is invalid inFFmpegFrameGrabber.getFrameRate()
(issue #292) - Update some samples to make them work with OpenCV 3.0
- Add new convenience
FFmpegFrameRecorder.record(Frame frame, int pixelFormat)
method (issue #181) - Let
Java2DFrameConverter.copy()
fromByteBuffer
with 4 channels toBufferedImage.TYPE_INT_RGB
, among others, also taking into account theflipChannels
argument (issue #181)
- Offer the Apache License, Version 2.0, as a new choice of license, in addition to the GPLv2 with Classpath exception
- Upgrade support to OpenCV 3.0.0
- Upgrade supported FFmpeg API to the 2.7 release branch
- Switch descriptor used by
ObjectFinder
from SURF to AKAZE - Let users get resized images from
FFmpegFrameGrabber
by callingsetImageWidth()
andsetImageHeight()
beforestart()
- Add check for supported display size in the
RecordActivity
sample (pull #153) - Clarify the semantics of
FrameConverter
(issue #150) - Fix
FFmpegFrameRecorder
not saving the last few frames, especially when encoding with x264 (issue #50) - Add
FrameConverterTest
and fix a couple of bugs uncovered by it - Make
Frame implements Indexable
for easy and efficient access to image pixels - Fix
AbstractMethodError
thrown fromOpenCVFrameConverter
on some versions of the JDK (issue #143) - Add
FFmpegFrameGrabber.grabImage()
method to restore the functionality previously provided byIplImage grab()
(issue #116) - Give users of
FFmpegFrameGrabber
andFFmpegFrameRecorder
access to more options and metadata (issue #132) - Add the ability to specify from which video and audio streams
FFmpegFrameGrabber
should grab from (issue #135) - Fix
Java2DFrameConverter
when used withBufferedImage.TYPE_INT_RGB
or other types based onint
(issue #140) - Add new
WebcamAndMicrophoneCapture
sample (pull #131) - Add
aspectRatio
property toFrameGrabber
andFrameRecorder
, to be able to use pixel aspect ratios other than 1.0 (issue #90)
- Upgrade support to OpenCV 2.4.11
- Upgrade supported FFmpeg API to the 2.6 release branch
- Add new
Square
sample, thanks to Geir Ruud - Add
AndroidFrameConverter
,Java2DFrameConverter
andOpenCVFrameConverter
, and use them to refactorFrame
,CanvasFrame
,FrameGrabber
, andFrameRecorder
in a way to help users avoid coupling with Android, Java 2D, or OpenCV (issue #84) - Fix
Demo
class in theREADME.md
file (issue #102) - Add new
ColoredObjectTrack
sample (pull #99) - Add
option
property toFFmpegFrameGrabber
to 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_base
warnings displayed byFFmpegFrameRecorder
(issue #75) - Add new
TemplateMatching
sample, thanks to Waldemar Neto - Update instructions in the
README.md
file for manual installation in Android Studio - Replace deprecated
CvMat
andIplImage
functionality used in theDemo
class with newIndexer
API, and provide samplepom.xml
file for Maven - Make
FFmpegFrameGrabber.getFrameRate()
returnAVStream.avg_frame_rate
instead ofr_frame_rate
(issue #63) - Disable DocLint, which prevents the build from succeeding on Java 8 (issue bytedeco/javacpp#5)
- Add
FlyCapture2FrameGrabber
with cross-platform support of FlyCapture2 (pull #45) - Fix issue that would prevent
CanvasFrame
from working on Mac OS X with recent versions of the JDK (issue #39 and issue #314) - Upgrade
RecordActivity
sample 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
, andaudioBitrate
properties toFrameGrabber
- Work around
avcodec
andavdevice
not loading properly forFFmpegFrameGrabber
andFFmpegFrameRecorder
(issue #24) - Do key frame detection in
FFmpegFrameRecorder
based onAVPacket
, notAVPicture
(pull #20)
- Remove
platform
property frompom.xml
, replaced with theplatform.dependency
one in JavaCPP Presets (issue #10) - Add new
RLSA
sample, thanks to Nicholas Woodward (issue #469) - Fix a timestamp rounding issue in
FFmpegFrameGrabber
that causessetFrameNumber()
to sometimes pick the wrong frame if FPS is not a proper divisor of 1000000 (issue #5) - Increase the flexibility of the
pom.xml
file by making it possible to specify a custom version of JavaCPP - Add missing dependencies for JogAmp in the
pom.xml
file (issue #2) - Add new
OpenCVFaceRecognizer
sample, thanks to Petter Christian Bjelland - Add new
OpticalFlowDense
sample, thanks to Dawit Gebreyohannes (issue #468) - Make it easier to try out the
FaceRecognition.java
sample (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
FFmpegFrameRecorder
not refreshing the resampler when the format of samples changes (issue #465) - Rename the
com.googlecode.javacv.cpp
package toorg.bytedeco.javacpp
, andcom.googlecode.javacv
toorg.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
ObjectFinder
not working with recent versions of OpenCV, especially on Android (issue #214) - Added new
FrameRecorder.gopSize
property to let users set a desired GOP size instead of the default one of 12 FFmpegFrameGrabber
now takes into account calls tosetPixelFormat()
(issue #429), but does not enforce it- Added a
Frame.audioChannels
field 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 toCameraParams
andMatchesInfo
(issue #421) - Fixed errors such as "jniopencv_nonfree.dll: Can't find dependent libraries" by adding the
opencv_ocl
module 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 theRecordActivity
sample, 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.jnlp
to 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
freenect
to reflect the latest changes of OpenKinect's master branch - Updated
videoInput
to reflect the latest changes in the "update2013" branch - Added
Frame.opaque
field to give access to the rawAVFrame
in the case ofFFmpegFrameGrabber
(issue #399) - Added new
FFmpegFrameGrabber.grabKeyFrame()
method to grab key frames (I-frames) directly (issue #312) VideoInputFrameGrabber
now 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.xml
file getting downloaded by theDemo
class (issue #402) - Added a
Frame.sampleRate
field to allow audio samples to be resampled byFFmpegFrameRecorder
(issue #388) - Incorporated
IPCameraFrameGrabber
from Greg Perry (issue #384) - Fixed thread safety issues with FFmpeg in
FFmpegFrameGrabber
andFFmpegFrameRecorder
(issue #377) - Fixed memory leak in the
MotionDetector.java
sample file (issue #372) - New
videoCodecName
andaudioCodecName
properties to allow users ofFFmpegFrameRecorder
to 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.keyFrame
field returned byFFmpegFrameGrabber.grabFrame()
to know when a grabbed frame is a key frame or not (issue #312) - Worked around problem in
samples/RecordActivity.java
that would happen when trying to record a frame with an invalid timestamp (issue #313) - Fixed potential resource leak that could occur after
FFmpegFrameRecorder
throwing anException
- Fixed
FFmpegFrameGrabber
not 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
FFmpegFrameRecorder
not 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
FFmpegFrameRecorder
for protocols like RTP - Added support for planar audio formats to
FFmpegFrameGrabber
andFFmpegFrameRecorder
, as required by newer versions of FFmpeg for at least MP3 and AAC - Enhanced
FFmpegFrameRecorder
by making it use the closest supported frame rate for the given codec instead of failing - To support variable bitrate (VBR) encoding, appended new
videoQuality
andaudioQuality
properties toFFmpegFrameRecorder
, which usually have an effective range of [0, 51] and overrides thevideoBitrate
andaudioBitrate
properties
- Upgraded support to OpenCV 2.4.4
CanvasFrame.waitKey(-1)
does not wait anymore and returns the lastKeyEvent
dispatched since the last call to it- Upgraded supported FFmpeg API to the 1.1 release branch
- Fixed bug in
FaceRecognition.java
sample (issue #276) - Included
Sobel()
,Scharr()
,Laplacian()
, andCanny()
fromopencv_imgproc
whose equivalent functions in the C API have missing parameters - Extended
OpenKinectFrameGrabber
withsetDepthFormat()
andsetVideoFormat()
methods to be able to set both formats independently (issue #273) - Fixed
Blender.blend()
having its@OutputMat
incorrectly annotated as@InputMat
(issue #272) - Added new
RecordActivity.java
Android sample from Shawn Van Every and Qianliang Zhang - Added missing
allocate()
methods forFunctionPointer
inAVIOContext
and 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)FrameGrabber
together - Fixed
cvQueryHistValue_1D()
and other functions that use a rawCvArr
object - Fixed problem when subclassing
CanvasFrame
- Upgraded support to OpenCV 2.4.3 (issue #233)
- Fixed functions like
Algorithm.getMat()
andHOGDescriptor.getDefaultPeopleDetector()
returningnull
instead 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
StringVector
andMatVector
new convenient bulk constructors andput()
methods taking arrays ofString
,IplImage
,CvMat
, etc. - Included new
Blobs
module from David Grossman and the correspondingBlobDemo
sample - Added missing
opencv_core.partition()
function (issue #144) - Fixed up the samples a bit (issue #229 and issue #230)
- Switched the majority of
@Adapter
annotations to more concise ones like@StdVector
as allowed by new capabilities of JavaCPP - Fixed
FFmpegFrameGrabber.getLengthInFrames()
andOpenCVFrameGrabber.getLengthInTime()
(issue #231 and issue #236) - Enhanced
FFmpegFrameRecorder
to 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.skip
property topom.xml
, such that a command likemvn package -Pall -Djavacpp.skip=true
only recompiles the Java source files, but also addedplatform.root
andcompiler.path
properties, which map directly to JavaCPP's for convenience
- Provided new
javacv-linux-arm.jar
build thanks to Jeremy Nicola (issue #184) - Additional default properties inside
pom.xml
make it easier to build JavaCV from source (issue #202), callingmvn package
now succeeds with only OpenCV and a C++ compiler for JavaCPP - Made a few minor updates for OpenCV 2.4.2
- New
Pointer.limit
property of JavaCPP can now be used to get thesize
of an output parameter, and to specify the maximumsize
on 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
FFmpegFrameRecorder
settings to H.263, MPEG-4, etc. codecs and fixed H.264 encoding with libx264 (issue #160) - Refined the
FaceApplet
sample - Fixed
FlannBasedMatcher
constructor,FaceRecognizer.train()
, andStitcher.stitch()/composePanorama()
(issue #211) - Fixed
CanvasFrame
sometimes 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
FaceApplet
sample 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.xml
file 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.xml
orpom.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 aconnection
argument such asVI_COMPOSITE
to support analog cameras and what not- Fixed
FaceRecognition
sample (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 aflipChannels
parameter, 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 theirBufferedImage
to make it easier to keep color components in the right order (issue #163) - Refactored
FrameGrabber
andFrameRecorder
a 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
Settings
properties to reflect better their meanings
- Added
GLCanvasFrame
to show OpenGL renderbuffers on screen, plus a new factory methodJavaCVCL.createCLGLImageFrom()
to create compatible ones fromIplImage
objects, as well as more user-friendlygetGLContext()
,getGL()
andgetGL2()
methods - Fixed various things of the original
CanvasFrame
, andJavaCV.createCLImage()
andcreateIplImage()
, also appendingFrom
to their names - New
createPinnedBuffer()
andcreatePinnedIplImage()
factory methods inJavaCVCL
to 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
GNImageAlignerCL
andProjectorDevice
(itsuseOpenGL
property) to support fully OpenCL and OpenGL acceleration - Refactored
Parallel
a bit so that we may set the number of threads it uses via its staticnumThreads
property 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
ObjectFinder
with aSettings.useFLANN
property to let it use FLANN via OpenCV - Cleaned up and optimized
HandMouse
CanvasFrame
,FrameGrabber
,FrameRecorder
, andProjectiveDevice
objects now throwException
objects of a nested class instead of the too genericjava.lang.Exception
one- Moved parallel execution of
cvkernels.multiWarpColorTransform()
, modifyingImageTransformer
classes, fromGNImageAligner
intocvkernels
, which now also supports other image types thanfloat
- Renamed some
Settings
properties here and there to correct typos and reflect better their meanings - Updated
freenect
to 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.timestamp
toFrameGrabber
, also adding aframeNumber
property, both allowing to seek within streams too - Removed
triggerFlushSize
property fromCameraDevice
andFrameGrabber
, instead relying on thenumBuffers
property to decide the required size of a buffer flush - Corrected the logic behind
FFmpegFrameGrabber.getFrameRate()
andgetTimestamp()
(issue #151) - Created a
BufferRing
class 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_highgui
to load color images compatible with OpenCL more easily JavaCvErrorCallback
now outputs messages toLogger
instead ofSystem.err
- Defined
VI_COM_MULTI_THREADED
forvideoInput
, 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.ColorMode
toImageMode
and itsBGR
value toCOLOR
to reflect the fact that aFrameGrabber
instance can return color images in some arbitrary format, but added a newpixelFormat
property 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
, andframeRate
properties switch to their effective values - Added new
FrameGrabber.sensorPattern
property to obtain the Bayer filter layout of raw data fromDC1394FrameGrabber
andFlyCaptureFrameGrabber
- Readded to
KDTree
,Index
, andHOGDescriptor
some functions withFloatPointer
andIntPointer
arguments that were mistakenly removed when OpenCV switched to usingcv::InputArray
andcv::OutputArray
parameter types (issue #134) - Renamed
ProjectiveGainBiasTransformer
toProjectiveColorTransformer
- Added a few classes to do some processing using OpenCL and OpenGL:
JavaCVCL
,GNImageAlignerCL
,ProjectiveTransformerCL
,ProjectiveColorTransformerCL
, andProCamTransformerCL
with some other related files - Renamed
Parallel.numCores
to the more conventionalParallel.NUM_CORES
- Added new
FaceRecognition.java
sample 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
PS3EyeFrameGrabber
from Jiri Masa can now grab images using the SDK from Code Laboratories
- Fixed
DC1394FrameGrabber
andFlyCaptureFrameGrabber
to 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()
withBufferedImage
objects ofSinglePixelPackedSampleModel
(issue #102) - C++ functions using
std::vector
objects 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::Mat
orcv::OutputArray
returned 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
OpenCVFrameGrabber
now 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
CvMatArray
andIplImageArray
as well as histogram related functions - Fixed
FFmpegFrameGrabber
, andFFmpegFrameRecorder
now works on Android also - Fixed calls, such as
opencv_flann.Index.knnSearch()
, that require aMatAdapter
or anArrayAdapter
for output
- New
freenect
wrapper and correspondingOpenKinectFrameGrabber
to 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
CvMat
object pooling in favor of more efficientThreadLocal
objects 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 thannull
under Mac OS X - FFmpeg now works properly on Windows and Android (issue #63) with newer binaries
- New
videoInputLib
wrapper and correspondingVideoInputFrameGrabber
to capture using DirectShow, useful under Windows 7 where OpenCV and FFmpeg can fail to capture using Video for Windows (issue #58) GeometricCalibrator
now reports the maximum errors in addition to the average (RMS) errors
- Added a
format
property toCameraDevice
,FrameGrabber
, andFrameRecorder
, mostly useful forFFmpegFrameGrabber
, where interesting values include "dv1394", "mjpeg", "video4linux2", "vfwcap", and "x11grab" OpenCVFrameRecorder
now usesCV_FOURCC_PROMPT
under Windows as default sinceCV_FOURCC_DEFAULT
crashes (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
HandMouse
functionality, which depends on the image alignment framework - Fixed
ProjectiveDevice.distort()
, which mistakenly undistorted images instead - New
HoughLines
sample 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
FFmpegFrameGrabber
having 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
CanvasFrame
in the hope to make it behave better outside the EDT - Made clearer the error messages thrown from
FrameGrabber
objects, whenstart()
may not have been called - Fixed version specific declarations of
CvStereoBMState
and 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 CanvasFrame
now redraws itsCanvas
after the user resizes theFrame
- Fixed the
Error
thrown when callingCanvasFrame.showImage()
from the EDT - Added check to
DC1394FrameGrabber
so that a "Failed to initialize libdc1394" does not crash the JVM FFmpegFrameGrabber
does not crash anymore when forgetting to callstart()
before agrab()
ortrigger()
FrameGrabber
now selects the default grabber a bit better- Made sweeping changes (for the better, but still not finalized) to
GNImageAligner
,ProjectiveTransformer
,ProjectiveGainBiasTransformer
, andProCamTransformer
... - Added to
JavaCV
more methods related to transformation of planes:perspectiveTransform()
,getPlaneParameters()
,getPerspectiveTransform()
, andHtoRt()
, as well asProjectiveDevice.getFrontoParallelH()
- Added a static
autoSynch
flag to allStructure
classes ofcxcore
,cv
, andcvaux
, which you may set tofalse
prior to the return of things like big and heavyCvSeq
to 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
ByValue
subclasses toCvSeq
,CvSet
,CvContourTree
, andCvChain
... Any others missing? - Fixed
Exception
thrown fromcvCreateHist()
under JNA 3.2.7 (issue #26) - Enhanced
CvMat.put()
, which now supports setting submatrices - Improved inside
IplImage
the support ofBufferedImage
, especially those using aDirectColorModel
(issue #23) - Fixed crash in
cvkernels
when color transformationX
isnull
- Fixed crash that would occur in
CanvasFrame
for some video drivers FFmpegFrameGrabber
now supports other input formats (devices), such asx11grab
that 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
deltaScale
andtryToFixPlane
toGNImageAligner.Settings
(the first used inImageTransformer.Parameters
as 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
Test2
class that did not work under Windows - Fixed corruption by the
cvkernels
transformer
at the borders - Modified
CanvasFrame
constructors and added agamma
argument used byshowImage(IplImage)
CanvasFrame
now lets users resize the frame, while displayed images are stretched to fit the new size- Renamed
CanvasFrame.acquireGraphics()
tocreateGraphics()
for consistency - When
FlyCaptureFrameGrabber
cannot 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
numThreads
property toGNImageAligner
and fixed a few minor inconsistencies as well - Fixed incorrect
Java.HnToRt()
, and added a fewnorm()
andrandn()
methods - For functions with
float[]
anddouble[]
arguments incvaux
andcv
, added complementaryFloatBuffer
andDoubleBuffer
declarations - 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 theval
field, convenient for Scala whereval
is a reserved word - Fixed the construction of
IplImage
from aPointer
- Removed incorrect cases when an
IplImage
gets converted to aBufferedImage.TYPE_CUSTOM
- Made
CvArr.PointerByReference
a bit more consistent and general
- Modified
IplImage
,FrameGrabber
, andCanvasFrame
to get better default behavior of gamma correction - Fixed
cv.CvHistogram
and related histogram functions CameraDevice.Settings.triggerFlushSize
now defaults to 5 (only affectsOpenCVFrameGrabber
andFFmpegFrameGrabber
)- Replaced
LMImageAligner
byGNImageAligner
, 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
fullScreen
argument fromCanvasFrame
constructors, which will now switch to full-screen mode only when ascreenNumber
is explicitly passed - Renamed
FrameGrabber.ColorMode.GRAYSCALE
toGRAY
- Replaced deprecated functions from
FFmpegFrameGrabber
andFFmpegFrameRecorder
FFmpegFrameGrabber
can now resize images
- Added new classes and methods used by ProCamTracker:
cvkernels
,JavaCV.fractalTriangleWave()
,ImageAligner
,LMImageAligner
,ImageTransformer
,ProjectiveTransformer
,ProjectiveGainBiasTransformer
,ProCamTransformer
, andReflectanceInitializer
CameraDevice.Settings
has a newdeviceFile
property (used by aFrameGrabber
), which brings up a file dialog for somePropertyEditor
s- Moved in
CameraSettings
,ProjectorSettings
, andFrameGrabber.PropertyEditor
from theprocamcalib
package - Added to
CameraDevice.Settings
andFrameGrabber
atriggerFlushSize
property 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.deviceNumber
toInteger
so we may set it tonull
- Fixed and enhanced
CanvasFrame.showImage()
methods a bit - In
triggerMode
DC1394FrameGrabber
now 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
Marker
to support different size and spacing in X and Y - Added
Settings
toObjectFinder
- Fixed distortion problem in
ProjectiveDevice
andProCamColorCalibrator
with OpenCV 1.1pre1 - Split
ProjectiveDevice.Settings
intoProjectiveDevice.CalibrationSettings
(for applications like ProCamCalib) andProjectiveDevice.CalibratedSettings
(for applications like ProCamTracker) - Renamed
gamma
toresponseGamma
inProjectiveDevice
, and moved previousnominalDistance
parameter toSettings
- Added
ProjectiveDevice.rescale()
to rescale calibration parameters when switching a device to a new image size ProjectiveDevice.undistort()
anddistort()
can nowuseFixedPointMaps
of OpenCVProjectiveDevice
and its subclasses nowthrow new Exception()
if theparameterFile
cannot 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
devicePath
setting toCameraDevice
that works withFFmpegFrameGrabber
,OpenCVFrameGrabber
, and otherFrameGrabber
with 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
IplImage
factory methodscreateCompatible(IplImage image)
,createIfNotCompatible(IplImage image, IplImage template)
, andcreateFrom(BufferedImage image)
- Fixed
distortionCoeffs
corruption that might occur inProjectiveDevice
- Added wrapper for the
cvaux
module of OpenCV - Added abstract
FrameRecorder
class and aOpenCVFrameRecorder
class - Fixed read() problem that might occur within Pointer constructors
- Running
java -jar javacv.jar
now displays version information
- Fixed
CanvasFrame
from getting stuck in a maximized window - Removed all
setAutoWrite(false)
fromcxcore
now that the bug appears fixed in JNA - Added
FFmpegFrameGrabber
andFFmpegFrameRecorder
to 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
CvHaarFeature
Structure - Renamed
CvIntScalar
factory 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.binarizationKWhiteMarkers
to 1.0 andProjectorDevice.brightnessBackground
to 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
OpenCVFrameGrabber
to grab frames from video files - Added
ProjectiveDevice.getRectifyingHomography()
method - Added
JavaCvErrorCallback
to easily catch errors of OpenCV in Java
- Moved the functionality of
CvMatPool
to theCvMat.take()
and.pool()
methods - Added color calibration for projector-camera systems (
ProCamColorCalibrator
) - Updated
DC1394FrameGrabber
to handle more conversion use cases automatically - Fixed
CvIntScalar
to 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.v20
can access everything from thecv
module 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
ObjectFinder
to plug the memory leak
- Fixed problem when loading distortion coefficients with
ProjectiveDevice
- Added automatic read and write for functions with arrays of
Structure
orPointerByReference
- Added to
cv.java
a few missing functions related to calibration - Fixed up a bit helper methods for
CvPoint*
,CvScalar
,CvRect
,CvBox2D
,CvMat
,IplImage
,CvMemStorage
,CvSeq
, andCvSeqBlock
- Added
CvMatPool
toMarkedPlane
andMarker
- Added a few new
distort()
methods toProjectiveDevice
- Last version to support OpenCV 1.1pre1: Future version will require OpenCV 2.0
IplImage
now flips the buffer on copy if necessary- Added needed Pointer constructor for
CvSURFPoint
andCvConvexityDefect
- Cleaned up a bit the messy Buffers in
CvMat
- Added
get*Buffer()
functions toIplImage
- Added more options for gamma correction in
IplImage
andProjectiveDevice
- Further cleaned up the namespace and constructors of
ProjectiveDevices
CanvasFrame.waitKey()
now only checksKeyEvent.KEY_PRESSED
- Added
CvMatPool
to avoid recreating matrices - Moved
CvScalar
functions tocxcore
- Switched to using
import static
for 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)!