Book Image

Android Application Programming with OpenCV 3

By : Joseph Howse
Book Image

Android Application Programming with OpenCV 3

By: Joseph Howse

Overview of this book

<p>Android Application Programming with OpenCV 3 is a practical, hands-on guide to computer vision and mobile app development. It shows how to capture, manipulate, and analyze images while building an application that combines photography and augmented reality. To help the reader become a well-rounded developer, the book covers OpenCV (a computer vision library), Android SDK (a mobile app framework), OpenGL ES (a 3D graphics framework), and even JNI (a Java/C++ interoperability layer).</p> <p>Now in its second edition, the book offers thoroughly reviewed code, instructions, and explanations. It is fully updated to support OpenCV 3 and Android 5, as well as earlier versions. Although it focuses on OpenCV's Java bindings, this edition adds an extensive chapter on JNI and C++, so that the reader is well primed to use OpenCV in other environments.</p>
Table of Contents (13 chapters)
Android Application Programming with OpenCV 3
Credits
About the Author
About the Reviewers
www.PacktPub.com
Preface
Index

Modifying the filter interface


As we discussed in Understanding the role of JNI, C++ is designed for manual memory management. It frees memory on command, not on a garbage collector's schedule. If we want to provide a degree of manual memory management to Java users as well, we can write a public method that is responsible for freeing any C++ resources (or other unmanaged resources) associated with a Java class. Conventionally, such a method is named dispose. Since several of our Filter implementations will own C++ resources, let's add a dispose method to Filter.java:

public interface Filter {
  public abstract void dispose();
  public abstract void apply(final Mat src, final Mat dst);
}

Let's modify NoneFilter.java to provide an empty implementation of dispose, as seen in the following code:

public class NoneFilter implements Filter {

  @Override
  public void dispose() {
    // Do nothing.
  }

  @Override
  public void apply(final Mat src, final Mat dst) {
    // Do nothing.
  }
}

Similarly...