« Previous - Version 13/52 (diff) - Next » - Current version
Daniil Osokin, 2014-07-14 06:01 pm


Contents

How to contribute

We suppose that you've seen the http://opencv.org/contribute.html page, and now, as an enthusiastic coder, want to contribute some code. For that purpose OpenCV project now has a mirror on the GitHub, to simplify everybody's life! And if you're familiar with the GitHub way of working, you can contribute in a friendly and familiar way. So, the preferred way to submit your code is to create a pull request on the GitHub (you can even do not create tickets here). This way it will be automatically tested and reviewed: http://pullrequest.opencv.org.

Ready to start? Here is the repository to fork: https://github.com/itseez/opencv.

Overall process

Here are some important details regarding the contribution to the OpenCV project.

"Fork & Pull model" for code contribution

  1. Create your fork of OpenCV repository: https://github.com/Itseez/opencv (see https://help.github.com/articles/fork-a-repo for details).
  2. Choose the right "base branch" onto which pull request will be applied. As of today (Feb 2013), OpenCV has two main branches for development:
    1. "2.4" - used for the next minor releases of OpenCV (e.g. 2.4.3, 2.4.4, etc). This branch is good for contributing performance optimizations and bugfixes. New functionality usually goes to the "master" branch. Please note, "2.4" can contain only binary compatible code relative to the current major version (2.4).
    2. "master" - used for the future major releases of OpenCV (2.5). It can contain binary incompatible with current major version changes. By default all the new code goes here.
  3. Write code, according to all prerequisites from below.
  4. When you are done, create a pull request with your commits (see https://help.github.com/articles/using-pull-requests for details).

Testing and merging of pull requests

  1. Your pull request will be automatically tested by OpenCV's buildbot (testing status can be checked here: http://pullrequest.opencv.org). If any builders are failed, you should fix the issue.
  2. When all builders are green, one of OpenCV developers will review your code. Reviewer could ask you to modify your pull request. Please provide timely response for reviewers, otherwise you submission could be postponed or even rejected.

Pull request lifecycle

Prerequisites

Below are some recommendations for contributors. They are raw, but can be used as a starting point for anybody who wants to see his code added to the library.

We would gladly accept such a contribution, but because of little resources available on our side, I would ask you to do all the preparations. Here is the checklist, including both generic items and the specific things related to your code that I found after brief inspection:

  1. A prerequisite: is the algorithm patented? If yes, then we may not be that interested in putting it in.
  2. License - the current license is fine, it's compatible with OpenCV.
  3. Interface. Here some work is needed to make this code a seamless part of OpenCV.
    • M_PI -> CV_PI
    • You should remove all the static constants from the header. it's not portable and generally a bad practice. Use defines and enumerations.
    • cv:: and std:: should not be used in the header, since all the stuff is already inside cv namespace and we already have "using std::vector", "using std::string" directives.
    • "m_" in member names should be dropped, we do not this convention in OpenCV.
  4. Implementation.
    • The code should be portable, it should compile fine on ARM too, for example. Therefore, you should not use SSE2 intrinsics outside of conditional compilation. Instead of "#ifdef USE_SSE" you should use "#if CV_SSE2".
    • Avoiding duplication of existing OpenCV functionality.
    • Writing to cerr should be replaced with CV_Error() calls.
  5. Documentation.
  6. You should provide sample code.
    • help() function should be added, check opencv/samples/cpp.
  7. Regression tests - the code should include some regression tests.
    • Please, take a look at opencv/modules/features2d/test/test_features2d.cpp. You will need to add a similar test for your code.
  8. Integration
    • Take the latest version of our repository or fork from our github mirror at https://github.com/Itseez/opencv/
    • Add your code
    • Insert documentation and add the test to the corresponding module
    • Build OpenCV, run tests. If you have access to both Linux and Windows - great! Sometimes GCC-approved code does not built with MSVC and vice versa.
    • Create pull request on github.com or create patch file or and submit it as patch at http://code.opencv.org/projects/opencv/issues/new.