[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-4184":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":25,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":34,"readmeContent":35,"aiSummary":36,"trendingCount":16,"starSnapshotCount":16,"syncStatus":17,"lastSyncTime":37,"discoverSource":38},4184,"javacv","bytedeco\u002Fjavacv","bytedeco","Java interface to OpenCV, FFmpeg, and more","",null,"Java",8308,1618,237,456,0,2,4,10,6,40.63,"Other",false,"master",true,[27,28,29,5,30,31,32,33],"computer-vision","ffmpeg","java","maven","multimedia","opencv","opencv-java","2026-06-12 02:01:00","JavaCV\r\n======\r\n\r\n[![Gitter](https:\u002F\u002Fbadges.gitter.im\u002Fbytedeco\u002Fjavacv.svg)](https:\u002F\u002Fgitter.im\u002Fbytedeco\u002Fjavacv) [![Maven Central](https:\u002F\u002Fmaven-badges.herokuapp.com\u002Fmaven-central\u002Forg.bytedeco\u002Fjavacv-platform\u002Fbadge.svg)](https:\u002F\u002Fmaven-badges.herokuapp.com\u002Fmaven-central\u002Forg.bytedeco\u002Fjavacv-platform) [![Sonatype Nexus (Snapshots)](https:\u002F\u002Fimg.shields.io\u002Fnexus\u002Fs\u002Fhttps\u002Foss.sonatype.org\u002Forg.bytedeco\u002Fjavacv.svg)](http:\u002F\u002Fbytedeco.org\u002Fbuilds\u002F) [![Build Status](https:\u002F\u002Ftravis-ci.org\u002Fbytedeco\u002Fjavacv.svg?branch=master)](https:\u002F\u002Ftravis-ci.org\u002Fbytedeco\u002Fjavacv) \u003Csup>Commercial support:\u003C\u002Fsup> [![xscode](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FAvailable%20on-xs%3Acode-blue?style=?style=plastic&logo=appveyor&logo=data:image\u002Fpng;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRF\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002FVXz1bAAAAAJ0Uk5T\u002FwDltzBKAAAAlUlEQVR42uzXSwqAMAwE0Mn9L+3Ggtgkk35QwcnSJo9S+yGwM9DCooCbgn4YrJ4CIPUcQF7\u002FXSBbx2TEz4sAZ2q1RAECBAiYBlCtvwN+KiYAlG7UDGj59MViT9hOwEqAhYCtAsUZvL6I6W8c2wcbd+LIWSCHSTeSAAECngN4xxIDSK9f4B9t377Wd7H5Nt7\u002FXz8eAgwAvesLRjYYPuUAAAAASUVORK5CYII=)](https:\u002F\u002Fxscode.com\u002Fbytedeco\u002Fjavacv)\r\n\r\n\r\nIntroduction\r\n------------\r\nJavaCV uses wrappers from the [JavaCPP Presets](https:\u002F\u002Fgithub.com\u002Fbytedeco\u002Fjavacpp-presets) of commonly used libraries by researchers in the field of computer vision ([OpenCV](http:\u002F\u002Fopencv.org\u002F), [FFmpeg](http:\u002F\u002Fffmpeg.org\u002F), [libdc1394](http:\u002F\u002Fdamien.douxchamps.net\u002Fieee1394\u002Flibdc1394\u002F), [FlyCapture](https:\u002F\u002Fwww.flir.com\u002Fproducts\u002Fflycapture-sdk\u002F), [Spinnaker](https:\u002F\u002Fwww.flir.com\u002Fproducts\u002Fspinnaker-sdk\u002F), [OpenKinect](http:\u002F\u002Fopenkinect.org\u002F), [librealsense](https:\u002F\u002Fgithub.com\u002FIntelRealSense\u002Flibrealsense), [CL PS3 Eye Driver](https:\u002F\u002Fcodelaboratories.com\u002Fdownloads\u002F), [videoInput](http:\u002F\u002Fmuonics.net\u002Fschool\u002Fspring05\u002FvideoInput\u002F), [ARToolKitPlus](https:\u002F\u002Flaunchpad.net\u002Fartoolkitplus), [flandmark](https:\u002F\u002Fgithub.com\u002Furicamic\u002Fflandmark), [Leptonica](http:\u002F\u002Fwww.leptonica.org\u002F), and [Tesseract](https:\u002F\u002Fgithub.com\u002Ftesseract-ocr\u002Ftesseract)) and provides utility classes to make their functionality easier to use on the Java platform, including Android.\r\n\r\nJavaCV also comes with hardware accelerated full-screen image display (`CanvasFrame` and `GLCanvasFrame`), easy-to-use methods to execute code in parallel on multiple cores (`Parallel`), user-friendly geometric and color calibration of cameras and projectors (`GeometricCalibrator`, `ProCamGeometricCalibrator`, `ProCamColorCalibrator`), detection and matching of feature points (`ObjectFinder`), a set of classes that implement direct image alignment of projector-camera systems (mainly `GNImageAligner`, `ProjectiveTransformer`, `ProjectiveColorTransformer`, `ProCamTransformer`, and `ReflectanceInitializer`), a blob analysis package (`Blobs`), as well as miscellaneous functionality in the `JavaCV` class. Some of these classes also have an OpenCL and OpenGL counterpart, their names ending with `CL` or starting with `GL`, i.e.: `JavaCVCL`, `GLCanvasFrame`, etc.\r\n\r\nTo learn how to use the API, since documentation currently lacks, please refer to the [Sample Usage](#sample-usage) section below as well as the [sample programs](https:\u002F\u002Fgithub.com\u002Fbytedeco\u002Fjavacv\u002Ftree\u002Fmaster\u002Fsamples\u002F), including two for Android (`FacePreview.java` and `RecordActivity.java`), also found in the `samples` directory. You may also find it useful to refer to the source code of [ProCamCalib](https:\u002F\u002Fgithub.com\u002Fbytedeco\u002Fprocamcalib) and [ProCamTracker](https:\u002F\u002Fgithub.com\u002Fbytedeco\u002Fprocamtracker) as well as [examples ported from OpenCV2 Cookbook](https:\u002F\u002Fgithub.com\u002Fbytedeco\u002Fjavacv-examples\u002F) and the associated [wiki pages](https:\u002F\u002Fgithub.com\u002Fbytedeco\u002Fjavacv-examples\u002Ftree\u002Fmaster\u002FOpenCV_Cookbook).\r\n\r\nPlease keep me informed of any updates or fixes you make to the code so that I may integrate them into the next release. Thank you! And feel free to ask questions on [the mailing list](http:\u002F\u002Fgroups.google.com\u002Fgroup\u002Fjavacv) or [the discussion forum](https:\u002F\u002Fgithub.com\u002Fbytedeco\u002Fjavacv\u002Fdiscussions) if you encounter any problems with the software! I am sure it is far from perfect...\r\n\r\n\r\nDownloads\r\n---------\r\nArchives containing JAR files are available as [releases](https:\u002F\u002Fgithub.com\u002Fbytedeco\u002Fjavacv\u002Freleases). The binary archive contains builds for Android, iOS, Linux, Mac OS X, and Windows. The JAR files for specific child modules or platforms can also be obtained individually from the [Maven Central Repository](http:\u002F\u002Fsearch.maven.org\u002F#search|ga|1|bytedeco).\r\n\r\nTo install manually the JAR files, follow the instructions in the [Manual Installation](#manual-installation) section below.\r\n\r\nWe can also have everything downloaded and installed automatically with:\r\n\r\n * Maven (inside the `pom.xml` file)\r\n```xml\r\n  \u003Cdependency>\r\n    \u003CgroupId>org.bytedeco\u003C\u002FgroupId>\r\n    \u003CartifactId>javacv-platform\u003C\u002FartifactId>\r\n    \u003Cversion>1.5.13\u003C\u002Fversion>\r\n  \u003C\u002Fdependency>\r\n```\r\n\r\n * Gradle (inside the `build.gradle.kts` or `build.gradle` file)\r\n```groovy\r\n  dependencies {\r\n    implementation(\"org.bytedeco:javacv-platform:1.5.13\")\r\n  }\r\n```\r\n\r\n * Leiningen (inside the `project.clj` file)\r\n```clojure\r\n  :dependencies [\r\n    [org.bytedeco\u002Fjavacv-platform \"1.5.13\"]\r\n  ]\r\n```\r\n\r\n * sbt (inside the `build.sbt` file)\r\n```scala\r\n  libraryDependencies += \"org.bytedeco\" % \"javacv-platform\" % \"1.5.13\"\r\n```\r\n\r\nThis downloads binaries for all platforms, but to get binaries for only one platform we can set the `javacpp.platform` system property (via the `-D` command line option) to something like `android-arm`, `linux-x86_64`, `macosx-x86_64`, `windows-x86_64`, etc. Please refer to the [README.md file of the JavaCPP Presets](https:\u002F\u002Fgithub.com\u002Fbytedeco\u002Fjavacpp-presets#downloads) for details. Another option available to Gradle users is [Gradle JavaCPP](https:\u002F\u002Fgithub.com\u002Fbytedeco\u002Fgradle-javacpp), and similarly for Scala users there is [SBT-JavaCV](https:\u002F\u002Fgithub.com\u002Fbytedeco\u002Fsbt-javacv).\r\n\r\n\r\nRequired Software\r\n-----------------\r\nTo use JavaCV, you will first need to download and install the following software:\r\n\r\n * An implementation of Java SE 8 or newer:\r\n   * OpenJDK  http:\u002F\u002Fopenjdk.java.net\u002Finstall\u002F  or\r\n   * Oracle JDK  http:\u002F\u002Fwww.oracle.com\u002Ftechnetwork\u002Fjava\u002Fjavase\u002Fdownloads\u002F  or\r\n   * IBM JDK  http:\u002F\u002Fwww.ibm.com\u002Fdeveloperworks\u002Fjava\u002Fjdk\u002F  or\r\n   * Microsoft JDK  https:\u002F\u002Fwww.microsoft.com\u002Fopenjdk  etc\r\n\r\nFurther, although not always required, some functionality of JavaCV also relies on:\r\n\r\n * CL Eye Platform SDK (Windows only)  http:\u002F\u002Fcodelaboratories.com\u002Fdownloads\u002F\r\n * Android SDK API 24 or newer  http:\u002F\u002Fdeveloper.android.com\u002Fsdk\u002F\r\n * JOCL and JOGL from JogAmp  http:\u002F\u002Fjogamp.org\u002F\r\n\r\nFinally, please make sure everything has the same bitness: **32-bit and 64-bit modules do not mix under any circumstances**.\r\n\r\n\r\nManual Installation\r\n-------------------\r\nSimply put all the desired JAR files (`opencv*.jar`, `ffmpeg*.jar`, etc.), in addition to `javacpp.jar` and `javacv.jar`, somewhere in your class path. Here are some more specific instructions for common cases:\r\n\r\nNetBeans (Java SE 8 or newer):\r\n\r\n 1. In the Projects window, right-click the Libraries node of your project, and select \"Add JAR\u002FFolder...\".\r\n 2. Locate the JAR files, select them, and click OK.\r\n\r\nEclipse (Java SE 8 or newer):\r\n\r\n 1. Navigate to Project > Properties > Java Build Path > Libraries and click \"Add External JARs...\".\r\n 2. Locate the JAR files, select them, and click OK.\r\n \r\nVisual Studio Code (Java SE 8 or newer):\r\n\r\n 1. Navigate to Java Projects > Referenced Libraries, and click `+`.\r\n 2. Locate the JAR files, select them, and click OK.\r\n\r\nIntelliJ IDEA (Android 7.0 or newer):\r\n\r\n 1. Follow the instructions on this page: http:\u002F\u002Fdeveloper.android.com\u002Ftraining\u002Fbasics\u002Ffirstapp\u002F\r\n 2. Copy all the JAR files into the `app\u002Flibs` subdirectory.\r\n 3. Navigate to File > Project Structure > app > Dependencies, click `+`, and select \"2 File dependency\".\r\n 4. Select all the JAR files from the `libs` subdirectory.\r\n 5. In the AndroidManifest.xml add `android:extractNativeLibs=\"true\"`\r\n\r\nAfter that, the wrapper classes for OpenCV and FFmpeg, for example, can automatically access all of their C\u002FC++ APIs:\r\n\r\n * [OpenCV documentation](http:\u002F\u002Fdocs.opencv.org\u002Fmaster\u002F)\r\n * [FFmpeg documentation](http:\u002F\u002Fffmpeg.org\u002Fdoxygen\u002Ftrunk\u002F)\r\n\r\n\r\nSample Usage\r\n------------\r\nThe class definitions are basically ports to Java of the original header files in C\u002FC++, and I deliberately decided to keep as much of the original syntax as possible. For example, here is a method that tries to load an image file, smooth it, and save it back to disk:\r\n\r\n```java\r\nimport org.bytedeco.opencv.opencv_core.*;\r\nimport org.bytedeco.opencv.opencv_imgproc.*;\r\nimport static org.bytedeco.opencv.global.opencv_core.*;\r\nimport static org.bytedeco.opencv.global.opencv_imgproc.*;\r\nimport static org.bytedeco.opencv.global.opencv_imgcodecs.*;\r\n\r\npublic class Smoother {\r\n    public static void smooth(String filename) {\r\n        Mat image = imread(filename);\r\n        if (image != null) {\r\n            GaussianBlur(image, image, new Size(3, 3), 0);\r\n            imwrite(filename, image);\r\n        }\r\n    }\r\n}\r\n```\r\n\r\nJavaCV also comes with helper classes and methods on top of OpenCV and FFmpeg to facilitate their integration to the Java platform. Here is a small demo program demonstrating the most frequently useful parts:\r\n\r\n```java\r\nimport java.io.File;\r\nimport java.net.URL;\r\nimport org.bytedeco.javacv.*;\r\nimport org.bytedeco.javacpp.*;\r\nimport org.bytedeco.javacpp.indexer.*;\r\nimport org.bytedeco.opencv.opencv_core.*;\r\nimport org.bytedeco.opencv.opencv_imgproc.*;\r\nimport org.bytedeco.opencv.opencv_calib3d.*;\r\nimport org.bytedeco.opencv.opencv_objdetect.*;\r\nimport static org.bytedeco.opencv.global.opencv_core.*;\r\nimport static org.bytedeco.opencv.global.opencv_imgproc.*;\r\nimport static org.bytedeco.opencv.global.opencv_calib3d.*;\r\nimport static org.bytedeco.opencv.global.opencv_objdetect.*;\r\n\r\npublic class Demo {\r\n    public static void main(String[] args) throws Exception {\r\n        String classifierName = null;\r\n        if (args.length > 0) {\r\n            classifierName = args[0];\r\n        } else {\r\n            URL url = new URL(\"https:\u002F\u002Fraw.github.com\u002Fopencv\u002Fopencv\u002Fmaster\u002Fdata\u002Fhaarcascades\u002Fhaarcascade_frontalface_alt.xml\");\r\n            File file = Loader.cacheResource(url);\r\n            classifierName = file.getAbsolutePath();\r\n        }\r\n\r\n        \u002F\u002F We can \"cast\" Pointer objects by instantiating a new object of the desired class.\r\n        CascadeClassifier classifier = new CascadeClassifier(classifierName);\r\n        if (classifier == null) {\r\n            System.err.println(\"Error loading classifier file \\\"\" + classifierName + \"\\\".\");\r\n            System.exit(1);\r\n        }\r\n\r\n        \u002F\u002F The available FrameGrabber classes include OpenCVFrameGrabber (opencv_videoio),\r\n        \u002F\u002F DC1394FrameGrabber, FlyCapture2FrameGrabber, OpenKinectFrameGrabber, OpenKinect2FrameGrabber,\r\n        \u002F\u002F RealSenseFrameGrabber, RealSense2FrameGrabber, PS3EyeFrameGrabber, VideoInputFrameGrabber, and FFmpegFrameGrabber.\r\n        FrameGrabber grabber = FrameGrabber.createDefault(0);\r\n        grabber.start();\r\n\r\n        \u002F\u002F CanvasFrame, FrameGrabber, and FrameRecorder use Frame objects to communicate image data.\r\n        \u002F\u002F We need a FrameConverter to interface with other APIs (Android, Java 2D, JavaFX, Tesseract, OpenCV, etc).\r\n        OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat();\r\n\r\n        \u002F\u002F FAQ about IplImage and Mat objects from OpenCV:\r\n        \u002F\u002F - For custom raw processing of data, createBuffer() returns an NIO direct\r\n        \u002F\u002F   buffer wrapped around the memory pointed by imageData, and under Android we can\r\n        \u002F\u002F   also use that Buffer with Bitmap.copyPixelsFromBuffer() and copyPixelsToBuffer().\r\n        \u002F\u002F - To get a BufferedImage from an IplImage, or vice versa, we can chain calls to\r\n        \u002F\u002F   Java2DFrameConverter and OpenCVFrameConverter, one after the other.\r\n        \u002F\u002F - Java2DFrameConverter also has static copy() methods that we can use to transfer\r\n        \u002F\u002F   data more directly between BufferedImage and IplImage or Mat via Frame objects.\r\n        Mat grabbedImage = converter.convert(grabber.grab());\r\n        int height = grabbedImage.rows();\r\n        int width = grabbedImage.cols();\r\n\r\n        \u002F\u002F Objects allocated with `new`, clone(), or a create*() factory method are automatically released\r\n        \u002F\u002F by the garbage collector, but may still be explicitly released by calling deallocate().\r\n        \u002F\u002F You shall NOT call cvReleaseImage(), cvReleaseMemStorage(), etc. on objects allocated this way.\r\n        Mat grayImage = new Mat(height, width, CV_8UC1);\r\n        Mat rotatedImage = grabbedImage.clone();\r\n\r\n        \u002F\u002F The OpenCVFrameRecorder class simply uses the VideoWriter of opencv_videoio,\r\n        \u002F\u002F but FFmpegFrameRecorder also exists as a more versatile alternative.\r\n        FrameRecorder recorder = FrameRecorder.createDefault(\"output.avi\", width, height);\r\n        recorder.start();\r\n\r\n        \u002F\u002F CanvasFrame is a JFrame containing a Canvas component, which is hardware accelerated.\r\n        \u002F\u002F It can also switch into full-screen mode when called with a screenNumber.\r\n        \u002F\u002F We should also specify the relative monitor\u002Fcamera response for proper gamma correction.\r\n        CanvasFrame frame = new CanvasFrame(\"Some Title\", CanvasFrame.getDefaultGamma()\u002Fgrabber.getGamma());\r\n\r\n        \u002F\u002F Let's create some random 3D rotation...\r\n        Mat randomR    = new Mat(3, 3, CV_64FC1),\r\n            randomAxis = new Mat(3, 1, CV_64FC1);\r\n        \u002F\u002F We can easily and efficiently access the elements of matrices and images\r\n        \u002F\u002F through an Indexer object with the set of get() and put() methods.\r\n        DoubleIndexer Ridx = randomR.createIndexer(),\r\n                   axisIdx = randomAxis.createIndexer();\r\n        axisIdx.put(0, (Math.random() - 0.5) \u002F 4,\r\n                       (Math.random() - 0.5) \u002F 4,\r\n                       (Math.random() - 0.5) \u002F 4);\r\n        Rodrigues(randomAxis, randomR);\r\n        double f = (width + height) \u002F 2.0;  Ridx.put(0, 2, Ridx.get(0, 2) * f);\r\n                                            Ridx.put(1, 2, Ridx.get(1, 2) * f);\r\n        Ridx.put(2, 0, Ridx.get(2, 0) \u002F f); Ridx.put(2, 1, Ridx.get(2, 1) \u002F f);\r\n        System.out.println(Ridx);\r\n\r\n        \u002F\u002F We can allocate native arrays using constructors taking an integer as argument.\r\n        Point hatPoints = new Point(3);\r\n\r\n        while (frame.isVisible() && (grabbedImage = converter.convert(grabber.grab())) != null) {\r\n            \u002F\u002F Let's try to detect some faces! but we need a grayscale image...\r\n            cvtColor(grabbedImage, grayImage, CV_BGR2GRAY);\r\n            RectVector faces = new RectVector();\r\n            classifier.detectMultiScale(grayImage, faces);\r\n            long total = faces.size();\r\n            for (long i = 0; i \u003C total; i++) {\r\n                Rect r = faces.get(i);\r\n                int x = r.x(), y = r.y(), w = r.width(), h = r.height();\r\n                rectangle(grabbedImage, new Point(x, y), new Point(x + w, y + h), Scalar.RED, 1, CV_AA, 0);\r\n\r\n                \u002F\u002F To access or pass as argument the elements of a native array, call position() before.\r\n                hatPoints.position(0).x(x - w \u002F 10     ).y(y - h \u002F 10);\r\n                hatPoints.position(1).x(x + w * 11 \u002F 10).y(y - h \u002F 10);\r\n                hatPoints.position(2).x(x + w \u002F 2      ).y(y - h \u002F 2 );\r\n                fillConvexPoly(grabbedImage, hatPoints.position(0), 3, Scalar.GREEN, CV_AA, 0);\r\n            }\r\n\r\n            \u002F\u002F Let's find some contours! but first some thresholding...\r\n            threshold(grayImage, grayImage, 64, 255, CV_THRESH_BINARY);\r\n\r\n            \u002F\u002F To check if an output argument is null we may call either isNull() or equals(null).\r\n            MatVector contours = new MatVector();\r\n            findContours(grayImage, contours, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);\r\n            long n = contours.size();\r\n            for (long i = 0; i \u003C n; i++) {\r\n                Mat contour = contours.get(i);\r\n                Mat points = new Mat();\r\n                approxPolyDP(contour, points, arcLength(contour, true) * 0.02, true);\r\n                drawContours(grabbedImage, new MatVector(points), -1, Scalar.BLUE);\r\n            }\r\n\r\n            warpPerspective(grabbedImage, rotatedImage, randomR, rotatedImage.size());\r\n\r\n            Frame rotatedFrame = converter.convert(rotatedImage);\r\n            frame.showImage(rotatedFrame);\r\n            recorder.record(rotatedFrame);\r\n        }\r\n        frame.dispose();\r\n        recorder.stop();\r\n        grabber.stop();\r\n    }\r\n}\r\n```\r\n\r\nFurthermore, after creating a `pom.xml` file with the following content:\r\n```xml\r\n\u003Cproject>\r\n    \u003CmodelVersion>4.0.0\u003C\u002FmodelVersion>\r\n    \u003CgroupId>org.bytedeco.javacv\u003C\u002FgroupId>\r\n    \u003CartifactId>demo\u003C\u002FartifactId>\r\n    \u003Cversion>1.5.13\u003C\u002Fversion>\r\n    \u003Cproperties>\r\n        \u003Cmaven.compiler.source>1.8\u003C\u002Fmaven.compiler.source>\r\n        \u003Cmaven.compiler.target>1.8\u003C\u002Fmaven.compiler.target>\r\n    \u003C\u002Fproperties>\r\n    \u003Cdependencies>\r\n        \u003Cdependency>\r\n            \u003CgroupId>org.bytedeco\u003C\u002FgroupId>\r\n            \u003CartifactId>javacv-platform\u003C\u002FartifactId>\r\n            \u003Cversion>1.5.13\u003C\u002Fversion>\r\n        \u003C\u002Fdependency>\r\n\r\n        \u003C!-- Additional dependencies required to use CUDA and cuDNN -->\r\n        \u003Cdependency>\r\n            \u003CgroupId>org.bytedeco\u003C\u002FgroupId>\r\n            \u003CartifactId>opencv-platform-gpu\u003C\u002FartifactId>\r\n            \u003Cversion>4.13.0-1.5.13\u003C\u002Fversion>\r\n        \u003C\u002Fdependency>\r\n\r\n        \u003C!-- Optional GPL builds with (almost) everything enabled -->\r\n        \u003Cdependency>\r\n            \u003CgroupId>org.bytedeco\u003C\u002FgroupId>\r\n            \u003CartifactId>ffmpeg-platform-gpl\u003C\u002FartifactId>\r\n            \u003Cversion>8.0.1-1.5.13\u003C\u002Fversion>\r\n        \u003C\u002Fdependency>\r\n    \u003C\u002Fdependencies>\r\n    \u003Cbuild>\r\n        \u003CsourceDirectory>.\u003C\u002FsourceDirectory>\r\n    \u003C\u002Fbuild>\r\n\u003C\u002Fproject>\r\n```\r\n\r\nAnd by placing the source code above in `Demo.java`, or similarly for other classes found in the [`samples`](samples), we can use the following command to have everything first installed automatically and then executed by Maven:\r\n```bash\r\n $ mvn compile exec:java -Dexec.mainClass=Demo\r\n```\r\n\r\n**Note**: In case of errors, please make sure that the `artifactId` in the `pom.xml` file reads `javacv-platform`, not `javacv` only, for example. The artifact `javacv-platform` adds all the necessary binary dependencies.\r\n\r\n\r\nBuild Instructions\r\n------------------\r\nIf the binary files available above are not enough for your needs, you might need to rebuild them from the source code. To this end, the project files were created for:\r\n\r\n * Maven 3.x  http:\u002F\u002Fmaven.apache.org\u002Fdownload.html\r\n * JavaCPP 1.5.13  https:\u002F\u002Fgithub.com\u002Fbytedeco\u002Fjavacpp\r\n * JavaCPP Presets 1.5.13  https:\u002F\u002Fgithub.com\u002Fbytedeco\u002Fjavacpp-presets\r\n\r\nOnce installed, simply call the usual `mvn install` command for JavaCPP, its Presets, and JavaCV. By default, no other dependencies than a C++ compiler for JavaCPP are required. Please refer to the comments inside the `pom.xml` files for further details.\r\n\r\nInstead of building the native libraries manually, we can run `mvn install` for JavaCV only and rely on the snapshot artifacts from the CI builds:\r\n\r\n * http:\u002F\u002Fbytedeco.org\u002Fbuilds\u002F\r\n\r\n\r\n----\r\nProject lead: Samuel Audet [samuel.audet `at` gmail.com](mailto:samuel.audet&nbsp;at&nbsp;gmail.com)  \r\nDeveloper site: https:\u002F\u002Fgithub.com\u002Fbytedeco\u002Fjavacv  \r\nDiscussion group: http:\u002F\u002Fgroups.google.com\u002Fgroup\u002Fjavacv\r\n","JavaCV是一个为OpenCV、FFmpeg等多媒体处理库提供Java接口的项目。它通过JavaCPP Presets封装了计算机视觉领域常用的多个库，简化了这些库在Java平台（包括Android）上的使用，并提供了硬件加速的全屏图像显示、多核并行计算支持、相机和投影仪的几何与颜色校准等功能。此外，JavaCV还包含特征点检测与匹配、投影-相机系统直接图像对齐、Blob分析等多种实用工具类。该项目适用于需要在Java环境中进行图像处理、视频编解码或计算机视觉相关开发的应用场景。","2026-06-11 02:58:55","top_language"]