Preparing to rebase
@ -1,13 +0,0 @@
|
|||||||
# ----------------------------------------------------------------------------
|
|
||||||
# CMake file for samples. See root CMakeLists.txt
|
|
||||||
#
|
|
||||||
# ----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
add_subdirectory(c)
|
|
||||||
add_subdirectory(cpp)
|
|
||||||
add_subdirectory(gpu)
|
|
||||||
add_subdirectory(ocl)
|
|
||||||
|
|
||||||
if(ANDROID AND BUILD_ANDROID_EXAMPLES)
|
|
||||||
add_subdirectory(android)
|
|
||||||
endif()
|
|
@ -1,20 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleDevelopmentRegion</key>
|
|
||||||
<string>English</string>
|
|
||||||
<key>CFBundleExecutable</key>
|
|
||||||
<string>${EXECUTABLE_NAME}</string>
|
|
||||||
<key>CFBundleIdentifier</key>
|
|
||||||
<string>de.rwth-aachen.ient.FaceTracker</string>
|
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
|
||||||
<string>6.0</string>
|
|
||||||
<key>CFBundlePackageType</key>
|
|
||||||
<string>APPL</string>
|
|
||||||
<key>CFBundleSignature</key>
|
|
||||||
<string>????</string>
|
|
||||||
<key>CFBundleVersion</key>
|
|
||||||
<string>1.0</string>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
@ -1,86 +0,0 @@
|
|||||||
|
|
||||||
#include <OpenCV/OpenCV.h>
|
|
||||||
#include <cassert>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
|
|
||||||
const char * WINDOW_NAME = "Face Tracker";
|
|
||||||
const CFIndex CASCADE_NAME_LEN = 2048;
|
|
||||||
char CASCADE_NAME[CASCADE_NAME_LEN] = "~/opencv/data/haarcascades/haarcascade_frontalface_alt2.xml";
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
int main (int argc, char * const argv[])
|
|
||||||
{
|
|
||||||
const int scale = 2;
|
|
||||||
|
|
||||||
// locate haar cascade from inside application bundle
|
|
||||||
// (this is the mac way to package application resources)
|
|
||||||
CFBundleRef mainBundle = CFBundleGetMainBundle ();
|
|
||||||
assert (mainBundle);
|
|
||||||
CFURLRef cascade_url = CFBundleCopyResourceURL (mainBundle, CFSTR("haarcascade_frontalface_alt2"), CFSTR("xml"), NULL);
|
|
||||||
assert (cascade_url);
|
|
||||||
Boolean got_it = CFURLGetFileSystemRepresentation (cascade_url, true,
|
|
||||||
reinterpret_cast<UInt8 *>(CASCADE_NAME), CASCADE_NAME_LEN);
|
|
||||||
if (! got_it)
|
|
||||||
abort ();
|
|
||||||
|
|
||||||
// create all necessary instances
|
|
||||||
cvNamedWindow (WINDOW_NAME, CV_WINDOW_AUTOSIZE);
|
|
||||||
CvCapture * camera = cvCreateCameraCapture (CV_CAP_ANY);
|
|
||||||
CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*) cvLoad (CASCADE_NAME, 0, 0, 0);
|
|
||||||
CvMemStorage* storage = cvCreateMemStorage(0);
|
|
||||||
assert (storage);
|
|
||||||
|
|
||||||
// you do own an iSight, don't you ?!?
|
|
||||||
if (! camera)
|
|
||||||
abort ();
|
|
||||||
|
|
||||||
// did we load the cascade?!?
|
|
||||||
if (! cascade)
|
|
||||||
abort ();
|
|
||||||
|
|
||||||
// get an initial frame and duplicate it for later work
|
|
||||||
IplImage * current_frame = cvQueryFrame (camera);
|
|
||||||
IplImage * draw_image = cvCreateImage(cvSize (current_frame->width, current_frame->height), IPL_DEPTH_8U, 3);
|
|
||||||
IplImage * gray_image = cvCreateImage(cvSize (current_frame->width, current_frame->height), IPL_DEPTH_8U, 1);
|
|
||||||
IplImage * small_image = cvCreateImage(cvSize (current_frame->width / scale, current_frame->height / scale), IPL_DEPTH_8U, 1);
|
|
||||||
assert (current_frame && gray_image && draw_image);
|
|
||||||
|
|
||||||
// as long as there are images ...
|
|
||||||
while (current_frame = cvQueryFrame (camera))
|
|
||||||
{
|
|
||||||
// convert to gray and downsize
|
|
||||||
cvCvtColor (current_frame, gray_image, CV_BGR2GRAY);
|
|
||||||
cvResize (gray_image, small_image, CV_INTER_LINEAR);
|
|
||||||
|
|
||||||
// detect faces
|
|
||||||
CvSeq* faces = cvHaarDetectObjects (small_image, cascade, storage,
|
|
||||||
1.1, 2, CV_HAAR_DO_CANNY_PRUNING,
|
|
||||||
cvSize (30, 30));
|
|
||||||
|
|
||||||
// draw faces
|
|
||||||
cvFlip (current_frame, draw_image, 1);
|
|
||||||
for (int i = 0; i < (faces ? faces->total : 0); i++)
|
|
||||||
{
|
|
||||||
CvRect* r = (CvRect*) cvGetSeqElem (faces, i);
|
|
||||||
CvPoint center;
|
|
||||||
int radius;
|
|
||||||
center.x = cvRound((small_image->width - r->width*0.5 - r->x) *scale);
|
|
||||||
center.y = cvRound((r->y + r->height*0.5)*scale);
|
|
||||||
radius = cvRound((r->width + r->height)*0.25*scale);
|
|
||||||
cvCircle (draw_image, center, radius, CV_RGB(0,255,0), 3, 8, 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
// just show the image
|
|
||||||
cvShowImage (WINDOW_NAME, draw_image);
|
|
||||||
|
|
||||||
// wait a tenth of a second for keypress and window drawing
|
|
||||||
int key = cvWaitKey (100);
|
|
||||||
if (key == 'q' || key == 'Q')
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// be nice and return no error
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -1,262 +0,0 @@
|
|||||||
// !$*UTF8*$!
|
|
||||||
{
|
|
||||||
archiveVersion = 1;
|
|
||||||
classes = {
|
|
||||||
};
|
|
||||||
objectVersion = 42;
|
|
||||||
objects = {
|
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
|
||||||
4D7DBE8E0C04A90C00D8835D /* FaceTracker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* FaceTracker.cpp */; };
|
|
||||||
4D95C9BE0C0577B200983E4D /* OpenCV.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D06E1E00C039982004AF23F /* OpenCV.framework */; };
|
|
||||||
4D95C9D80C0577BD00983E4D /* OpenCV.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4D06E1E00C039982004AF23F /* OpenCV.framework */; };
|
|
||||||
4DBF87310C05731500880673 /* haarcascade_frontalface_alt2.xml in Resources */ = {isa = PBXBuildFile; fileRef = 4DBF87300C05731500880673 /* haarcascade_frontalface_alt2.xml */; };
|
|
||||||
/* End PBXBuildFile section */
|
|
||||||
|
|
||||||
/* Begin PBXCopyFilesBuildPhase section */
|
|
||||||
4D7DBE8F0C04A93300D8835D /* CopyFiles */ = {
|
|
||||||
isa = PBXCopyFilesBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
dstPath = "";
|
|
||||||
dstSubfolderSpec = 10;
|
|
||||||
files = (
|
|
||||||
4D95C9D80C0577BD00983E4D /* OpenCV.framework in CopyFiles */,
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
/* End PBXCopyFilesBuildPhase section */
|
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
|
||||||
08FB7796FE84155DC02AAC07 /* FaceTracker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FaceTracker.cpp; sourceTree = "<group>"; };
|
|
||||||
4D06E1E00C039982004AF23F /* OpenCV.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenCV.framework; path = ../../../OpenCV.framework; sourceTree = SOURCE_ROOT; };
|
|
||||||
4D4CDBCC0C0630060001A8A2 /* README.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.txt; sourceTree = "<group>"; };
|
|
||||||
4D7DBE570C04A8FF00D8835D /* FaceTracker.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FaceTracker.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
||||||
4D7DBE590C04A8FF00D8835D /* FaceTracker-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = "FaceTracker-Info.plist"; sourceTree = "<group>"; };
|
|
||||||
4DBF87300C05731500880673 /* haarcascade_frontalface_alt2.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; name = haarcascade_frontalface_alt2.xml; path = ../../../data/haarcascades/haarcascade_frontalface_alt2.xml; sourceTree = SOURCE_ROOT; };
|
|
||||||
/* End PBXFileReference section */
|
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
|
||||||
4D7DBE550C04A8FF00D8835D /* Frameworks */ = {
|
|
||||||
isa = PBXFrameworksBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
4D95C9BE0C0577B200983E4D /* OpenCV.framework in Frameworks */,
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
/* End PBXFrameworksBuildPhase section */
|
|
||||||
|
|
||||||
/* Begin PBXGroup section */
|
|
||||||
08FB7794FE84155DC02AAC07 /* FrameworkTest */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
4D4CDBCC0C0630060001A8A2 /* README.txt */,
|
|
||||||
08FB7795FE84155DC02AAC07 /* Source */,
|
|
||||||
4DBF872C0C0572BC00880673 /* Resources */,
|
|
||||||
4D9D40B00C04AC1600EEFFD0 /* Frameworks */,
|
|
||||||
1AB674ADFE9D54B511CA2CBB /* Products */,
|
|
||||||
);
|
|
||||||
name = FrameworkTest;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
08FB7795FE84155DC02AAC07 /* Source */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
08FB7796FE84155DC02AAC07 /* FaceTracker.cpp */,
|
|
||||||
);
|
|
||||||
name = Source;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
1AB674ADFE9D54B511CA2CBB /* Products */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
4D7DBE570C04A8FF00D8835D /* FaceTracker.app */,
|
|
||||||
);
|
|
||||||
name = Products;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
4D9D40B00C04AC1600EEFFD0 /* Frameworks */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
4D06E1E00C039982004AF23F /* OpenCV.framework */,
|
|
||||||
);
|
|
||||||
name = Frameworks;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
4DBF872C0C0572BC00880673 /* Resources */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
4DBF87300C05731500880673 /* haarcascade_frontalface_alt2.xml */,
|
|
||||||
4D7DBE590C04A8FF00D8835D /* FaceTracker-Info.plist */,
|
|
||||||
);
|
|
||||||
name = Resources;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
/* End PBXGroup section */
|
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */
|
|
||||||
4D7DBE560C04A8FF00D8835D /* FaceTracker */ = {
|
|
||||||
isa = PBXNativeTarget;
|
|
||||||
buildConfigurationList = 4D7DBE5A0C04A8FF00D8835D /* Build configuration list for PBXNativeTarget "FaceTracker" */;
|
|
||||||
buildPhases = (
|
|
||||||
4D7DBE530C04A8FF00D8835D /* Resources */,
|
|
||||||
4D7DBE540C04A8FF00D8835D /* Sources */,
|
|
||||||
4D7DBE550C04A8FF00D8835D /* Frameworks */,
|
|
||||||
4D7DBE8F0C04A93300D8835D /* CopyFiles */,
|
|
||||||
);
|
|
||||||
buildRules = (
|
|
||||||
);
|
|
||||||
dependencies = (
|
|
||||||
);
|
|
||||||
name = FaceTracker;
|
|
||||||
productName = FaceTracker;
|
|
||||||
productReference = 4D7DBE570C04A8FF00D8835D /* FaceTracker.app */;
|
|
||||||
productType = "com.apple.product-type.application";
|
|
||||||
};
|
|
||||||
/* End PBXNativeTarget section */
|
|
||||||
|
|
||||||
/* Begin PBXProject section */
|
|
||||||
08FB7793FE84155DC02AAC07 /* Project object */ = {
|
|
||||||
isa = PBXProject;
|
|
||||||
buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "FaceTracker" */;
|
|
||||||
hasScannedForEncodings = 1;
|
|
||||||
mainGroup = 08FB7794FE84155DC02AAC07 /* FrameworkTest */;
|
|
||||||
projectDirPath = "";
|
|
||||||
targets = (
|
|
||||||
4D7DBE560C04A8FF00D8835D /* FaceTracker */,
|
|
||||||
);
|
|
||||||
};
|
|
||||||
/* End PBXProject section */
|
|
||||||
|
|
||||||
/* Begin PBXResourcesBuildPhase section */
|
|
||||||
4D7DBE530C04A8FF00D8835D /* Resources */ = {
|
|
||||||
isa = PBXResourcesBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
4DBF87310C05731500880673 /* haarcascade_frontalface_alt2.xml in Resources */,
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
/* End PBXResourcesBuildPhase section */
|
|
||||||
|
|
||||||
/* Begin PBXSourcesBuildPhase section */
|
|
||||||
4D7DBE540C04A8FF00D8835D /* Sources */ = {
|
|
||||||
isa = PBXSourcesBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
4D7DBE8E0C04A90C00D8835D /* FaceTracker.cpp in Sources */,
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
/* End PBXSourcesBuildPhase section */
|
|
||||||
|
|
||||||
/* Begin XCBuildConfiguration section */
|
|
||||||
1DEB923608733DC60010E9CD /* Debug */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
|
||||||
PREBINDING = NO;
|
|
||||||
SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
|
|
||||||
};
|
|
||||||
name = Debug;
|
|
||||||
};
|
|
||||||
1DEB923708733DC60010E9CD /* Release */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
ARCHS = (
|
|
||||||
ppc,
|
|
||||||
i386,
|
|
||||||
);
|
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
|
||||||
PREBINDING = NO;
|
|
||||||
SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
|
|
||||||
};
|
|
||||||
name = Release;
|
|
||||||
};
|
|
||||||
4D7DBE5B0C04A8FF00D8835D /* Debug */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
COPY_PHASE_STRIP = NO;
|
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)",
|
|
||||||
"$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)",
|
|
||||||
);
|
|
||||||
FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/../opencv\"";
|
|
||||||
FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/../../..\"";
|
|
||||||
GCC_DYNAMIC_NO_PIC = NO;
|
|
||||||
GCC_ENABLE_FIX_AND_CONTINUE = YES;
|
|
||||||
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
|
|
||||||
GCC_MODEL_TUNING = G5;
|
|
||||||
GCC_OPTIMIZATION_LEVEL = 0;
|
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
|
||||||
GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
|
|
||||||
INFOPLIST_FILE = "FaceTracker-Info.plist";
|
|
||||||
INSTALL_PATH = "$(HOME)/Applications";
|
|
||||||
OTHER_LDFLAGS = (
|
|
||||||
"-framework",
|
|
||||||
Carbon,
|
|
||||||
);
|
|
||||||
PREBINDING = NO;
|
|
||||||
PRODUCT_NAME = FaceTracker;
|
|
||||||
WRAPPER_EXTENSION = app;
|
|
||||||
ZERO_LINK = YES;
|
|
||||||
};
|
|
||||||
name = Debug;
|
|
||||||
};
|
|
||||||
4D7DBE5C0C04A8FF00D8835D /* Release */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
COPY_PHASE_STRIP = YES;
|
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)",
|
|
||||||
"$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)",
|
|
||||||
);
|
|
||||||
FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/../opencv\"";
|
|
||||||
FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/../../..\"";
|
|
||||||
GCC_ENABLE_FIX_AND_CONTINUE = NO;
|
|
||||||
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
|
||||||
GCC_MODEL_TUNING = G5;
|
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
|
||||||
GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
|
|
||||||
INFOPLIST_FILE = "FaceTracker-Info.plist";
|
|
||||||
INSTALL_PATH = "$(HOME)/Applications";
|
|
||||||
OTHER_LDFLAGS = (
|
|
||||||
"-framework",
|
|
||||||
Carbon,
|
|
||||||
);
|
|
||||||
PREBINDING = NO;
|
|
||||||
PRODUCT_NAME = FaceTracker;
|
|
||||||
WRAPPER_EXTENSION = app;
|
|
||||||
ZERO_LINK = NO;
|
|
||||||
};
|
|
||||||
name = Release;
|
|
||||||
};
|
|
||||||
/* End XCBuildConfiguration section */
|
|
||||||
|
|
||||||
/* Begin XCConfigurationList section */
|
|
||||||
1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "FaceTracker" */ = {
|
|
||||||
isa = XCConfigurationList;
|
|
||||||
buildConfigurations = (
|
|
||||||
1DEB923608733DC60010E9CD /* Debug */,
|
|
||||||
1DEB923708733DC60010E9CD /* Release */,
|
|
||||||
);
|
|
||||||
defaultConfigurationIsVisible = 0;
|
|
||||||
defaultConfigurationName = Release;
|
|
||||||
};
|
|
||||||
4D7DBE5A0C04A8FF00D8835D /* Build configuration list for PBXNativeTarget "FaceTracker" */ = {
|
|
||||||
isa = XCConfigurationList;
|
|
||||||
buildConfigurations = (
|
|
||||||
4D7DBE5B0C04A8FF00D8835D /* Debug */,
|
|
||||||
4D7DBE5C0C04A8FF00D8835D /* Release */,
|
|
||||||
);
|
|
||||||
defaultConfigurationIsVisible = 0;
|
|
||||||
defaultConfigurationName = Release;
|
|
||||||
};
|
|
||||||
/* End XCConfigurationList section */
|
|
||||||
};
|
|
||||||
rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
|
|
||||||
}
|
|
@ -1,35 +0,0 @@
|
|||||||
FaceTracker/REAME.txt
|
|
||||||
2007-05-24, Mark Asbach <asbach@ient.rwth-aachen.de>
|
|
||||||
|
|
||||||
Objective:
|
|
||||||
This document is intended to get you up and running with an OpenCV Framework on Mac OS X
|
|
||||||
|
|
||||||
Building the OpenCV.framework:
|
|
||||||
In the main directory of the opencv distribution, you will find a shell script called
|
|
||||||
'make_frameworks.sh' that does all of the typical unixy './configure && make' stuff required
|
|
||||||
to build a universal binary framework. Invoke this script from Terminal.app, wait some minutes
|
|
||||||
and you are done.
|
|
||||||
|
|
||||||
OpenCV is a Private Framework:
|
|
||||||
On Mac OS X the concept of Framework bundles is meant to simplify distribution of shared libraries,
|
|
||||||
accompanying headers and documentation. There are however to subtly different 'flavours' of
|
|
||||||
Frameworks: public and private ones. The public frameworks get installed into the Frameworks
|
|
||||||
diretories in /Library, /System/Library or ~/Library and are meant to be shared amongst
|
|
||||||
applications. The private frameworks are only distributed as parts of an Application Bundle.
|
|
||||||
This makes it easier to deploy applications because they bring their own framework invisibly to
|
|
||||||
the user. No installation of the framework is necessary and different applications can bring
|
|
||||||
different versions of the same framework without any conflict.
|
|
||||||
Since OpenCV is still a moving target, it seems best to avoid any installation and versioning issues
|
|
||||||
for an end user. The OpenCV framework that currently comes with this demo application therefore
|
|
||||||
is a Private Framework.
|
|
||||||
|
|
||||||
Use it for targets that result in an Application Bundle:
|
|
||||||
Since it is a Private Framework, it must be copied to the Frameworks/ directory of an Application
|
|
||||||
Bundle, which means, it is useless for plain unix console applications. You should create a Carbon
|
|
||||||
or a Cocoa application target in XCode for your projects. Then add the OpenCV.framework just like
|
|
||||||
in this demo and add a Copy Files build phase to your target. Let that phase copy to the Framework
|
|
||||||
directory and drop the OpenCV.framework on the build phase (again just like in this demo code).
|
|
||||||
|
|
||||||
The resulting application bundle will be self contained and if you set compiler option correctly
|
|
||||||
(in the "Build" tab of the "Project Info" window you should find 'i386 ppc' for the architectures),
|
|
||||||
your application can just be copied to any OS 10.4 Mac and used without further installation.
|
|
7
samples/android/.gitignore
vendored
@ -1,7 +0,0 @@
|
|||||||
bin/
|
|
||||||
gen/
|
|
||||||
build.xml
|
|
||||||
local.properties
|
|
||||||
proguard-project.txt
|
|
||||||
project.properties
|
|
||||||
default.properties
|
|
@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<classpath>
|
|
||||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
|
||||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
|
||||||
<classpathentry kind="src" path="src"/>
|
|
||||||
<classpathentry kind="src" path="gen"/>
|
|
||||||
<classpathentry kind="output" path="bin/classes"/>
|
|
||||||
</classpath>
|
|
@ -1,33 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<projectDescription>
|
|
||||||
<name>OpenCV Sample - 15 puzzle</name>
|
|
||||||
<comment></comment>
|
|
||||||
<projects>
|
|
||||||
</projects>
|
|
||||||
<buildSpec>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.ApkBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
</buildSpec>
|
|
||||||
<natures>
|
|
||||||
<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
|
|
||||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
|
||||||
</natures>
|
|
||||||
</projectDescription>
|
|
@ -1,4 +0,0 @@
|
|||||||
eclipse.preferences.version=1
|
|
||||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
|
|
||||||
org.eclipse.jdt.core.compiler.compliance=1.6
|
|
||||||
org.eclipse.jdt.core.compiler.source=1.6
|
|
@ -1,34 +0,0 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
package="org.opencv.samples.puzzle15"
|
|
||||||
android:versionCode="1"
|
|
||||||
android:versionName="1.0" >
|
|
||||||
|
|
||||||
<uses-sdk android:minSdkVersion="8"/>
|
|
||||||
|
|
||||||
<application
|
|
||||||
android:icon="@drawable/icon"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
|
|
||||||
|
|
||||||
<activity
|
|
||||||
android:name=".Puzzle15Activity"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:screenOrientation="landscape"
|
|
||||||
android:configChanges="keyboardHidden|orientation" >
|
|
||||||
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
</application>
|
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.CAMERA"/>
|
|
||||||
|
|
||||||
<uses-feature android:name="android.hardware.camera" android:required="false"/>
|
|
||||||
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
|
|
||||||
<uses-feature android:name="android.hardware.camera.front" android:required="false"/>
|
|
||||||
<uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>
|
|
||||||
|
|
||||||
</manifest>
|
|
@ -1,6 +0,0 @@
|
|||||||
set(sample example-15-puzzle)
|
|
||||||
|
|
||||||
add_android_project(${sample} "${CMAKE_CURRENT_SOURCE_DIR}" LIBRARY_DEPS ${OpenCV_BINARY_DIR} SDK_TARGET 11 ${ANDROID_SDK_TARGET})
|
|
||||||
if(TARGET ${sample})
|
|
||||||
add_dependencies(opencv_android_examples ${sample})
|
|
||||||
endif()
|
|
Before Width: | Height: | Size: 2.0 KiB |
@ -1,6 +0,0 @@
|
|||||||
<resources>
|
|
||||||
<string name="app_name">OCV 15 Puzzle</string>
|
|
||||||
<string name="menu_toggle_tile_numbers">Show/hide tile numbers</string>
|
|
||||||
<string name="menu_start_new_game">Start new game</string>
|
|
||||||
|
|
||||||
</resources>
|
|
@ -1,194 +0,0 @@
|
|||||||
package org.opencv.samples.puzzle15;
|
|
||||||
|
|
||||||
import org.opencv.core.Core;
|
|
||||||
import org.opencv.core.CvType;
|
|
||||||
import org.opencv.core.Mat;
|
|
||||||
import org.opencv.core.Scalar;
|
|
||||||
import org.opencv.core.Size;
|
|
||||||
import org.opencv.core.Point;
|
|
||||||
|
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class is a controller for puzzle game.
|
|
||||||
* It converts the image from Camera into the shuffled image
|
|
||||||
*/
|
|
||||||
public class Puzzle15Processor {
|
|
||||||
|
|
||||||
private static final int GRID_SIZE = 4;
|
|
||||||
private static final int GRID_AREA = GRID_SIZE * GRID_SIZE;
|
|
||||||
private static final int GRID_EMPTY_INDEX = GRID_AREA - 1;
|
|
||||||
private static final String TAG = "Puzzle15Processor";
|
|
||||||
private static final Scalar GRID_EMPTY_COLOR = new Scalar(0x33, 0x33, 0x33, 0xFF);
|
|
||||||
|
|
||||||
private int[] mIndexes;
|
|
||||||
private int[] mTextWidths;
|
|
||||||
private int[] mTextHeights;
|
|
||||||
|
|
||||||
private Mat mRgba15;
|
|
||||||
private Mat[] mCells15;
|
|
||||||
private boolean mShowTileNumbers = true;
|
|
||||||
|
|
||||||
public Puzzle15Processor() {
|
|
||||||
mTextWidths = new int[GRID_AREA];
|
|
||||||
mTextHeights = new int[GRID_AREA];
|
|
||||||
|
|
||||||
mIndexes = new int [GRID_AREA];
|
|
||||||
|
|
||||||
for (int i = 0; i < GRID_AREA; i++)
|
|
||||||
mIndexes[i] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* this method is intended to make processor prepared for a new game */
|
|
||||||
public synchronized void prepareNewGame() {
|
|
||||||
do {
|
|
||||||
shuffle(mIndexes);
|
|
||||||
} while (!isPuzzleSolvable());
|
|
||||||
}
|
|
||||||
|
|
||||||
/* This method is to make the processor know the size of the frames that
|
|
||||||
* will be delivered via puzzleFrame.
|
|
||||||
* If the frames will be different size - then the result is unpredictable
|
|
||||||
*/
|
|
||||||
public synchronized void prepareGameSize(int width, int height) {
|
|
||||||
mRgba15 = new Mat(height, width, CvType.CV_8UC4);
|
|
||||||
mCells15 = new Mat[GRID_AREA];
|
|
||||||
|
|
||||||
for (int i = 0; i < GRID_SIZE; i++) {
|
|
||||||
for (int j = 0; j < GRID_SIZE; j++) {
|
|
||||||
int k = i * GRID_SIZE + j;
|
|
||||||
mCells15[k] = mRgba15.submat(i * height / GRID_SIZE, (i + 1) * height / GRID_SIZE, j * width / GRID_SIZE, (j + 1) * width / GRID_SIZE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < GRID_AREA; i++) {
|
|
||||||
Size s = Core.getTextSize(Integer.toString(i + 1), 3/* CV_FONT_HERSHEY_COMPLEX */, 1, 2, null);
|
|
||||||
mTextHeights[i] = (int) s.height;
|
|
||||||
mTextWidths[i] = (int) s.width;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* this method to be called from the outside. it processes the frame and shuffles
|
|
||||||
* the tiles as specified by mIndexes array
|
|
||||||
*/
|
|
||||||
public synchronized Mat puzzleFrame(Mat inputPicture) {
|
|
||||||
Mat[] cells = new Mat[GRID_AREA];
|
|
||||||
int rows = inputPicture.rows();
|
|
||||||
int cols = inputPicture.cols();
|
|
||||||
|
|
||||||
rows = rows - rows%4;
|
|
||||||
cols = cols - cols%4;
|
|
||||||
|
|
||||||
for (int i = 0; i < GRID_SIZE; i++) {
|
|
||||||
for (int j = 0; j < GRID_SIZE; j++) {
|
|
||||||
int k = i * GRID_SIZE + j;
|
|
||||||
cells[k] = inputPicture.submat(i * inputPicture.rows() / GRID_SIZE, (i + 1) * inputPicture.rows() / GRID_SIZE, j * inputPicture.cols()/ GRID_SIZE, (j + 1) * inputPicture.cols() / GRID_SIZE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
rows = rows - rows%4;
|
|
||||||
cols = cols - cols%4;
|
|
||||||
|
|
||||||
// copy shuffled tiles
|
|
||||||
for (int i = 0; i < GRID_AREA; i++) {
|
|
||||||
int idx = mIndexes[i];
|
|
||||||
if (idx == GRID_EMPTY_INDEX)
|
|
||||||
mCells15[i].setTo(GRID_EMPTY_COLOR);
|
|
||||||
else {
|
|
||||||
cells[idx].copyTo(mCells15[i]);
|
|
||||||
if (mShowTileNumbers) {
|
|
||||||
Core.putText(mCells15[i], Integer.toString(1 + idx), new Point((cols / GRID_SIZE - mTextWidths[idx]) / 2,
|
|
||||||
(rows / GRID_SIZE + mTextHeights[idx]) / 2), 3/* CV_FONT_HERSHEY_COMPLEX */, 1, new Scalar(255, 0, 0, 255), 2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < GRID_AREA; i++)
|
|
||||||
cells[i].release();
|
|
||||||
|
|
||||||
drawGrid(cols, rows, mRgba15);
|
|
||||||
|
|
||||||
return mRgba15;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void toggleTileNumbers() {
|
|
||||||
mShowTileNumbers = !mShowTileNumbers;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void deliverTouchEvent(int x, int y) {
|
|
||||||
int rows = mRgba15.rows();
|
|
||||||
int cols = mRgba15.cols();
|
|
||||||
|
|
||||||
int row = (int) Math.floor(y * GRID_SIZE / rows);
|
|
||||||
int col = (int) Math.floor(x * GRID_SIZE / cols);
|
|
||||||
|
|
||||||
if (row < 0 || row >= GRID_SIZE || col < 0 || col >= GRID_SIZE) {
|
|
||||||
Log.e(TAG, "It is not expected to get touch event outside of picture");
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
|
|
||||||
int idx = row * GRID_SIZE + col;
|
|
||||||
int idxtoswap = -1;
|
|
||||||
|
|
||||||
// left
|
|
||||||
if (idxtoswap < 0 && col > 0)
|
|
||||||
if (mIndexes[idx - 1] == GRID_EMPTY_INDEX)
|
|
||||||
idxtoswap = idx - 1;
|
|
||||||
// right
|
|
||||||
if (idxtoswap < 0 && col < GRID_SIZE - 1)
|
|
||||||
if (mIndexes[idx + 1] == GRID_EMPTY_INDEX)
|
|
||||||
idxtoswap = idx + 1;
|
|
||||||
// top
|
|
||||||
if (idxtoswap < 0 && row > 0)
|
|
||||||
if (mIndexes[idx - GRID_SIZE] == GRID_EMPTY_INDEX)
|
|
||||||
idxtoswap = idx - GRID_SIZE;
|
|
||||||
// bottom
|
|
||||||
if (idxtoswap < 0 && row < GRID_SIZE - 1)
|
|
||||||
if (mIndexes[idx + GRID_SIZE] == GRID_EMPTY_INDEX)
|
|
||||||
idxtoswap = idx + GRID_SIZE;
|
|
||||||
|
|
||||||
// swap
|
|
||||||
if (idxtoswap >= 0) {
|
|
||||||
synchronized (this) {
|
|
||||||
int touched = mIndexes[idx];
|
|
||||||
mIndexes[idx] = mIndexes[idxtoswap];
|
|
||||||
mIndexes[idxtoswap] = touched;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void drawGrid(int cols, int rows, Mat drawMat) {
|
|
||||||
for (int i = 1; i < GRID_SIZE; i++) {
|
|
||||||
Core.line(drawMat, new Point(0, i * rows / GRID_SIZE), new Point(cols, i * rows / GRID_SIZE), new Scalar(0, 255, 0, 255), 3);
|
|
||||||
Core.line(drawMat, new Point(i * cols / GRID_SIZE, 0), new Point(i * cols / GRID_SIZE, rows), new Scalar(0, 255, 0, 255), 3);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void shuffle(int[] array) {
|
|
||||||
for (int i = array.length; i > 1; i--) {
|
|
||||||
int temp = array[i - 1];
|
|
||||||
int randIx = (int) (Math.random() * i);
|
|
||||||
array[i - 1] = array[randIx];
|
|
||||||
array[randIx] = temp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isPuzzleSolvable() {
|
|
||||||
|
|
||||||
int sum = 0;
|
|
||||||
for (int i = 0; i < GRID_AREA; i++) {
|
|
||||||
if (mIndexes[i] == GRID_EMPTY_INDEX)
|
|
||||||
sum += (i / GRID_SIZE) + 1;
|
|
||||||
else {
|
|
||||||
int smaller = 0;
|
|
||||||
for (int j = i + 1; j < GRID_AREA; j++) {
|
|
||||||
if (mIndexes[j] < mIndexes[i])
|
|
||||||
smaller++;
|
|
||||||
}
|
|
||||||
sum += smaller;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return sum % 2 == 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<classpath>
|
|
||||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
|
||||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
|
||||||
<classpathentry kind="src" path="src"/>
|
|
||||||
<classpathentry kind="src" path="gen"/>
|
|
||||||
<classpathentry kind="output" path="bin/classes"/>
|
|
||||||
</classpath>
|
|
@ -1,33 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<projectDescription>
|
|
||||||
<name>OpenCV Sample - color-blob-detection</name>
|
|
||||||
<comment></comment>
|
|
||||||
<projects>
|
|
||||||
</projects>
|
|
||||||
<buildSpec>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.ApkBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
</buildSpec>
|
|
||||||
<natures>
|
|
||||||
<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
|
|
||||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
|
||||||
</natures>
|
|
||||||
</projectDescription>
|
|
@ -1,4 +0,0 @@
|
|||||||
eclipse.preferences.version=1
|
|
||||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
|
|
||||||
org.eclipse.jdt.core.compiler.compliance=1.6
|
|
||||||
org.eclipse.jdt.core.compiler.source=1.6
|
|
@ -1,38 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
package="org.opencv.samples.colorblobdetect"
|
|
||||||
android:versionCode="21"
|
|
||||||
android:versionName="2.1">
|
|
||||||
|
|
||||||
<application
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:icon="@drawable/icon"
|
|
||||||
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
|
|
||||||
|
|
||||||
<activity android:name="ColorBlobDetectionActivity"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:screenOrientation="landscape"
|
|
||||||
android:configChanges="keyboardHidden|orientation">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
</application>
|
|
||||||
|
|
||||||
<supports-screens android:resizeable="true"
|
|
||||||
android:smallScreens="true"
|
|
||||||
android:normalScreens="true"
|
|
||||||
android:largeScreens="true"
|
|
||||||
android:anyDensity="true" />
|
|
||||||
|
|
||||||
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="11" />
|
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.CAMERA"/>
|
|
||||||
|
|
||||||
<uses-feature android:name="android.hardware.camera" android:required="false"/>
|
|
||||||
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
|
|
||||||
<uses-feature android:name="android.hardware.camera.front" android:required="false"/>
|
|
||||||
<uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>
|
|
||||||
|
|
||||||
</manifest>
|
|
@ -1,7 +0,0 @@
|
|||||||
set(sample example-color-blob-detection)
|
|
||||||
|
|
||||||
add_android_project(${sample} "${CMAKE_CURRENT_SOURCE_DIR}" LIBRARY_DEPS ${OpenCV_BINARY_DIR} SDK_TARGET 11 ${ANDROID_SDK_TARGET})
|
|
||||||
if(TARGET ${sample})
|
|
||||||
add_dependencies(opencv_android_examples ${sample})
|
|
||||||
endif()
|
|
||||||
|
|
Before Width: | Height: | Size: 2.0 KiB |
@ -1,11 +0,0 @@
|
|||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent" >
|
|
||||||
|
|
||||||
<org.opencv.android.JavaCameraView
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="fill_parent"
|
|
||||||
android:id="@+id/color_blob_detection_activity_surface_view" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
@ -1,4 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<string name="app_name">OCV Color Blob Detection</string>
|
|
||||||
</resources>
|
|
@ -1,190 +0,0 @@
|
|||||||
package org.opencv.samples.colorblobdetect;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.opencv.android.BaseLoaderCallback;
|
|
||||||
import org.opencv.android.CameraBridgeViewBase.CvCameraViewFrame;
|
|
||||||
import org.opencv.android.LoaderCallbackInterface;
|
|
||||||
import org.opencv.android.OpenCVLoader;
|
|
||||||
import org.opencv.core.Core;
|
|
||||||
import org.opencv.core.CvType;
|
|
||||||
import org.opencv.core.Mat;
|
|
||||||
import org.opencv.core.MatOfPoint;
|
|
||||||
import org.opencv.core.Rect;
|
|
||||||
import org.opencv.core.Scalar;
|
|
||||||
import org.opencv.core.Size;
|
|
||||||
import org.opencv.android.CameraBridgeViewBase;
|
|
||||||
import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener2;
|
|
||||||
import org.opencv.imgproc.Imgproc;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.util.Log;
|
|
||||||
import android.view.MotionEvent;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.Window;
|
|
||||||
import android.view.WindowManager;
|
|
||||||
import android.view.View.OnTouchListener;
|
|
||||||
|
|
||||||
public class ColorBlobDetectionActivity extends Activity implements OnTouchListener, CvCameraViewListener2 {
|
|
||||||
private static final String TAG = "OCVSample::Activity";
|
|
||||||
|
|
||||||
private boolean mIsColorSelected = false;
|
|
||||||
private Mat mRgba;
|
|
||||||
private Scalar mBlobColorRgba;
|
|
||||||
private Scalar mBlobColorHsv;
|
|
||||||
private ColorBlobDetector mDetector;
|
|
||||||
private Mat mSpectrum;
|
|
||||||
private Size SPECTRUM_SIZE;
|
|
||||||
private Scalar CONTOUR_COLOR;
|
|
||||||
|
|
||||||
private CameraBridgeViewBase mOpenCvCameraView;
|
|
||||||
|
|
||||||
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
|
|
||||||
@Override
|
|
||||||
public void onManagerConnected(int status) {
|
|
||||||
switch (status) {
|
|
||||||
case LoaderCallbackInterface.SUCCESS:
|
|
||||||
{
|
|
||||||
Log.i(TAG, "OpenCV loaded successfully");
|
|
||||||
mOpenCvCameraView.enableView();
|
|
||||||
mOpenCvCameraView.setOnTouchListener(ColorBlobDetectionActivity.this);
|
|
||||||
} break;
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
super.onManagerConnected(status);
|
|
||||||
} break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public ColorBlobDetectionActivity() {
|
|
||||||
Log.i(TAG, "Instantiated new " + this.getClass());
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Called when the activity is first created. */
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
Log.i(TAG, "called onCreate");
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
requestWindowFeature(Window.FEATURE_NO_TITLE);
|
|
||||||
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
|
||||||
|
|
||||||
setContentView(R.layout.color_blob_detection_surface_view);
|
|
||||||
|
|
||||||
mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.color_blob_detection_activity_surface_view);
|
|
||||||
mOpenCvCameraView.setCvCameraViewListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPause()
|
|
||||||
{
|
|
||||||
super.onPause();
|
|
||||||
if (mOpenCvCameraView != null)
|
|
||||||
mOpenCvCameraView.disableView();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResume()
|
|
||||||
{
|
|
||||||
super.onResume();
|
|
||||||
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onDestroy() {
|
|
||||||
super.onDestroy();
|
|
||||||
if (mOpenCvCameraView != null)
|
|
||||||
mOpenCvCameraView.disableView();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onCameraViewStarted(int width, int height) {
|
|
||||||
mRgba = new Mat(height, width, CvType.CV_8UC4);
|
|
||||||
mDetector = new ColorBlobDetector();
|
|
||||||
mSpectrum = new Mat();
|
|
||||||
mBlobColorRgba = new Scalar(255);
|
|
||||||
mBlobColorHsv = new Scalar(255);
|
|
||||||
SPECTRUM_SIZE = new Size(200, 64);
|
|
||||||
CONTOUR_COLOR = new Scalar(255,0,0,255);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onCameraViewStopped() {
|
|
||||||
mRgba.release();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean onTouch(View v, MotionEvent event) {
|
|
||||||
int cols = mRgba.cols();
|
|
||||||
int rows = mRgba.rows();
|
|
||||||
|
|
||||||
int xOffset = (mOpenCvCameraView.getWidth() - cols) / 2;
|
|
||||||
int yOffset = (mOpenCvCameraView.getHeight() - rows) / 2;
|
|
||||||
|
|
||||||
int x = (int)event.getX() - xOffset;
|
|
||||||
int y = (int)event.getY() - yOffset;
|
|
||||||
|
|
||||||
Log.i(TAG, "Touch image coordinates: (" + x + ", " + y + ")");
|
|
||||||
|
|
||||||
if ((x < 0) || (y < 0) || (x > cols) || (y > rows)) return false;
|
|
||||||
|
|
||||||
Rect touchedRect = new Rect();
|
|
||||||
|
|
||||||
touchedRect.x = (x>4) ? x-4 : 0;
|
|
||||||
touchedRect.y = (y>4) ? y-4 : 0;
|
|
||||||
|
|
||||||
touchedRect.width = (x+4 < cols) ? x + 4 - touchedRect.x : cols - touchedRect.x;
|
|
||||||
touchedRect.height = (y+4 < rows) ? y + 4 - touchedRect.y : rows - touchedRect.y;
|
|
||||||
|
|
||||||
Mat touchedRegionRgba = mRgba.submat(touchedRect);
|
|
||||||
|
|
||||||
Mat touchedRegionHsv = new Mat();
|
|
||||||
Imgproc.cvtColor(touchedRegionRgba, touchedRegionHsv, Imgproc.COLOR_RGB2HSV_FULL);
|
|
||||||
|
|
||||||
// Calculate average color of touched region
|
|
||||||
mBlobColorHsv = Core.sumElems(touchedRegionHsv);
|
|
||||||
int pointCount = touchedRect.width*touchedRect.height;
|
|
||||||
for (int i = 0; i < mBlobColorHsv.val.length; i++)
|
|
||||||
mBlobColorHsv.val[i] /= pointCount;
|
|
||||||
|
|
||||||
mBlobColorRgba = converScalarHsv2Rgba(mBlobColorHsv);
|
|
||||||
|
|
||||||
Log.i(TAG, "Touched rgba color: (" + mBlobColorRgba.val[0] + ", " + mBlobColorRgba.val[1] +
|
|
||||||
", " + mBlobColorRgba.val[2] + ", " + mBlobColorRgba.val[3] + ")");
|
|
||||||
|
|
||||||
mDetector.setHsvColor(mBlobColorHsv);
|
|
||||||
|
|
||||||
Imgproc.resize(mDetector.getSpectrum(), mSpectrum, SPECTRUM_SIZE);
|
|
||||||
|
|
||||||
mIsColorSelected = true;
|
|
||||||
|
|
||||||
touchedRegionRgba.release();
|
|
||||||
touchedRegionHsv.release();
|
|
||||||
|
|
||||||
return false; // don't need subsequent touch events
|
|
||||||
}
|
|
||||||
|
|
||||||
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
|
|
||||||
mRgba = inputFrame.rgba();
|
|
||||||
|
|
||||||
if (mIsColorSelected) {
|
|
||||||
mDetector.process(mRgba);
|
|
||||||
List<MatOfPoint> contours = mDetector.getContours();
|
|
||||||
Log.e(TAG, "Contours count: " + contours.size());
|
|
||||||
Core.drawContours(mRgba, contours, -1, CONTOUR_COLOR);
|
|
||||||
|
|
||||||
Mat colorLabel = mRgba.submat(4, 68, 4, 68);
|
|
||||||
colorLabel.setTo(mBlobColorRgba);
|
|
||||||
|
|
||||||
Mat spectrumLabel = mRgba.submat(4, 4 + mSpectrum.rows(), 70, 70 + mSpectrum.cols());
|
|
||||||
mSpectrum.copyTo(spectrumLabel);
|
|
||||||
}
|
|
||||||
|
|
||||||
return mRgba;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Scalar converScalarHsv2Rgba(Scalar hsvColor) {
|
|
||||||
Mat pointMatRgba = new Mat();
|
|
||||||
Mat pointMatHsv = new Mat(1, 1, CvType.CV_8UC3, hsvColor);
|
|
||||||
Imgproc.cvtColor(pointMatHsv, pointMatRgba, Imgproc.COLOR_HSV2RGB_FULL, 4);
|
|
||||||
|
|
||||||
return new Scalar(pointMatRgba.get(0, 0));
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,108 +0,0 @@
|
|||||||
package org.opencv.samples.colorblobdetect;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.opencv.core.Core;
|
|
||||||
import org.opencv.core.CvType;
|
|
||||||
import org.opencv.core.Mat;
|
|
||||||
import org.opencv.core.MatOfPoint;
|
|
||||||
import org.opencv.core.Scalar;
|
|
||||||
import org.opencv.imgproc.Imgproc;
|
|
||||||
|
|
||||||
public class ColorBlobDetector {
|
|
||||||
// Lower and Upper bounds for range checking in HSV color space
|
|
||||||
private Scalar mLowerBound = new Scalar(0);
|
|
||||||
private Scalar mUpperBound = new Scalar(0);
|
|
||||||
// Minimum contour area in percent for contours filtering
|
|
||||||
private static double mMinContourArea = 0.1;
|
|
||||||
// Color radius for range checking in HSV color space
|
|
||||||
private Scalar mColorRadius = new Scalar(25,50,50,0);
|
|
||||||
private Mat mSpectrum = new Mat();
|
|
||||||
private List<MatOfPoint> mContours = new ArrayList<MatOfPoint>();
|
|
||||||
|
|
||||||
// Cache
|
|
||||||
Mat mPyrDownMat = new Mat();
|
|
||||||
Mat mHsvMat = new Mat();
|
|
||||||
Mat mMask = new Mat();
|
|
||||||
Mat mDilatedMask = new Mat();
|
|
||||||
Mat mHierarchy = new Mat();
|
|
||||||
|
|
||||||
public void setColorRadius(Scalar radius) {
|
|
||||||
mColorRadius = radius;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHsvColor(Scalar hsvColor) {
|
|
||||||
double minH = (hsvColor.val[0] >= mColorRadius.val[0]) ? hsvColor.val[0]-mColorRadius.val[0] : 0;
|
|
||||||
double maxH = (hsvColor.val[0]+mColorRadius.val[0] <= 255) ? hsvColor.val[0]+mColorRadius.val[0] : 255;
|
|
||||||
|
|
||||||
mLowerBound.val[0] = minH;
|
|
||||||
mUpperBound.val[0] = maxH;
|
|
||||||
|
|
||||||
mLowerBound.val[1] = hsvColor.val[1] - mColorRadius.val[1];
|
|
||||||
mUpperBound.val[1] = hsvColor.val[1] + mColorRadius.val[1];
|
|
||||||
|
|
||||||
mLowerBound.val[2] = hsvColor.val[2] - mColorRadius.val[2];
|
|
||||||
mUpperBound.val[2] = hsvColor.val[2] + mColorRadius.val[2];
|
|
||||||
|
|
||||||
mLowerBound.val[3] = 0;
|
|
||||||
mUpperBound.val[3] = 255;
|
|
||||||
|
|
||||||
Mat spectrumHsv = new Mat(1, (int)(maxH-minH), CvType.CV_8UC3);
|
|
||||||
|
|
||||||
for (int j = 0; j < maxH-minH; j++) {
|
|
||||||
byte[] tmp = {(byte)(minH+j), (byte)255, (byte)255};
|
|
||||||
spectrumHsv.put(0, j, tmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
Imgproc.cvtColor(spectrumHsv, mSpectrum, Imgproc.COLOR_HSV2RGB_FULL, 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Mat getSpectrum() {
|
|
||||||
return mSpectrum;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMinContourArea(double area) {
|
|
||||||
mMinContourArea = area;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void process(Mat rgbaImage) {
|
|
||||||
Imgproc.pyrDown(rgbaImage, mPyrDownMat);
|
|
||||||
Imgproc.pyrDown(mPyrDownMat, mPyrDownMat);
|
|
||||||
|
|
||||||
Imgproc.cvtColor(mPyrDownMat, mHsvMat, Imgproc.COLOR_RGB2HSV_FULL);
|
|
||||||
|
|
||||||
Core.inRange(mHsvMat, mLowerBound, mUpperBound, mMask);
|
|
||||||
Imgproc.dilate(mMask, mDilatedMask, new Mat());
|
|
||||||
|
|
||||||
List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
|
|
||||||
|
|
||||||
Imgproc.findContours(mDilatedMask, contours, mHierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);
|
|
||||||
|
|
||||||
// Find max contour area
|
|
||||||
double maxArea = 0;
|
|
||||||
Iterator<MatOfPoint> each = contours.iterator();
|
|
||||||
while (each.hasNext()) {
|
|
||||||
MatOfPoint wrapper = each.next();
|
|
||||||
double area = Imgproc.contourArea(wrapper);
|
|
||||||
if (area > maxArea)
|
|
||||||
maxArea = area;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Filter contours by area and resize to fit the original image size
|
|
||||||
mContours.clear();
|
|
||||||
each = contours.iterator();
|
|
||||||
while (each.hasNext()) {
|
|
||||||
MatOfPoint contour = each.next();
|
|
||||||
if (Imgproc.contourArea(contour) > mMinContourArea*maxArea) {
|
|
||||||
Core.multiply(contour, new Scalar(4,4), contour);
|
|
||||||
mContours.add(contour);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<MatOfPoint> getContours() {
|
|
||||||
return mContours;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<classpath>
|
|
||||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
|
||||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
|
||||||
<classpathentry kind="src" path="src"/>
|
|
||||||
<classpathentry kind="src" path="gen"/>
|
|
||||||
<classpathentry kind="output" path="bin/classes"/>
|
|
||||||
</classpath>
|
|
@ -1,75 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<?fileVersion 4.0.0?>
|
|
||||||
|
|
||||||
<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.settings">
|
|
||||||
<cconfiguration id="0.129633445">
|
|
||||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.129633445" moduleId="org.eclipse.cdt.core.settings" name="Default">
|
|
||||||
<externalSettings/>
|
|
||||||
<extensions>
|
|
||||||
<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
|
||||||
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
|
||||||
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
|
||||||
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
|
||||||
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
|
||||||
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
|
||||||
</extensions>
|
|
||||||
</storageModule>
|
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
|
||||||
<configuration artifactName="${ProjName}" buildProperties="" description="" id="0.129633445" name="Default" parent="org.eclipse.cdt.build.core.prefbase.cfg">
|
|
||||||
<folderInfo id="0.129633445." name="/" resourcePath="">
|
|
||||||
<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.2006441180" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
|
|
||||||
<targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.2006441180.527973180" name=""/>
|
|
||||||
<builder autoBuildTarget="" command="${NDKROOT}/ndk-build.cmd" enableAutoBuild="true" enableCleanBuild="false" id="org.eclipse.cdt.build.core.settings.default.builder.180541221" incrementalBuildTarget="" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
|
|
||||||
<tool id="org.eclipse.cdt.build.core.settings.holder.libs.791069665" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
|
|
||||||
<tool id="org.eclipse.cdt.build.core.settings.holder.1894181736" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
|
|
||||||
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.588929884" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
|
|
||||||
</tool>
|
|
||||||
<tool id="org.eclipse.cdt.build.core.settings.holder.303359177" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
|
|
||||||
<option id="org.eclipse.cdt.build.core.settings.holder.incpaths.373249505" name="Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths" valueType="includePath">
|
|
||||||
<listOptionValue builtIn="false" value=""${NDKROOT}/platforms/android-9/arch-arm/usr/include""/>
|
|
||||||
<listOptionValue builtIn="false" value=""${NDKROOT}/sources/cxx-stl/gnu-libstdc++/4.6/include""/>
|
|
||||||
<listOptionValue builtIn="false" value=""${NDKROOT}/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/include""/>
|
|
||||||
<listOptionValue builtIn="false" value=""${ProjDirPath}/../../sdk/native/jni/include""/>
|
|
||||||
</option>
|
|
||||||
<option id="org.eclipse.cdt.build.core.settings.holder.symbols.1424359063" name="Symbols" superClass="org.eclipse.cdt.build.core.settings.holder.symbols" valueType="definedSymbols">
|
|
||||||
<listOptionValue builtIn="false" value="ANDROID=1"/>
|
|
||||||
</option>
|
|
||||||
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.360067880" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
|
|
||||||
</tool>
|
|
||||||
<tool id="org.eclipse.cdt.build.core.settings.holder.1156172258" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
|
|
||||||
<option id="org.eclipse.cdt.build.core.settings.holder.incpaths.149918263" name="Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths" valueType="includePath">
|
|
||||||
<listOptionValue builtIn="false" value=""${NDKROOT}/platforms/android-9/arch-arm/usr/include""/>
|
|
||||||
<listOptionValue builtIn="false" value=""${NDKROOT}/sources/cxx-stl/gnu-libstdc++/4.6/include""/>
|
|
||||||
<listOptionValue builtIn="false" value=""${NDKROOT}/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/include""/>
|
|
||||||
<listOptionValue builtIn="false" value=""${ProjDirPath}/../../sdk/native/jni/include""/>
|
|
||||||
</option>
|
|
||||||
<option id="org.eclipse.cdt.build.core.settings.holder.symbols.719752707" name="Symbols" superClass="org.eclipse.cdt.build.core.settings.holder.symbols" valueType="definedSymbols">
|
|
||||||
<listOptionValue builtIn="false" value="ANDROID=1"/>
|
|
||||||
</option>
|
|
||||||
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.232493949" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
|
|
||||||
</tool>
|
|
||||||
</toolChain>
|
|
||||||
</folderInfo>
|
|
||||||
<sourceEntries>
|
|
||||||
<entry flags="VALUE_WORKSPACE_PATH" kind="sourcePath" name="jni"/>
|
|
||||||
</sourceEntries>
|
|
||||||
</configuration>
|
|
||||||
</storageModule>
|
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
|
||||||
</cconfiguration>
|
|
||||||
</storageModule>
|
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
|
||||||
<project id="OpenCV Sample - face-detection.null.1639518055" name="OpenCV Sample - face-detection"/>
|
|
||||||
</storageModule>
|
|
||||||
<storageModule moduleId="scannerConfiguration">
|
|
||||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
|
||||||
<scannerConfigBuildInfo instanceId="0.129633445">
|
|
||||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
|
||||||
</scannerConfigBuildInfo>
|
|
||||||
</storageModule>
|
|
||||||
<storageModule moduleId="refreshScope" versionNumber="1">
|
|
||||||
<resource resourceType="PROJECT" workspacePath="/OpenCV Sample - face-detection"/>
|
|
||||||
</storageModule>
|
|
||||||
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
|
|
||||||
</cproject>
|
|
@ -1,101 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<projectDescription>
|
|
||||||
<name>OpenCV Sample - face-detection</name>
|
|
||||||
<comment></comment>
|
|
||||||
<projects>
|
|
||||||
</projects>
|
|
||||||
<buildSpec>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
|
|
||||||
<triggers>auto,full,incremental,</triggers>
|
|
||||||
<arguments>
|
|
||||||
<dictionary>
|
|
||||||
<key>?name?</key>
|
|
||||||
<value></value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.append_environment</key>
|
|
||||||
<value>true</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.autoBuildTarget</key>
|
|
||||||
<value></value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.buildArguments</key>
|
|
||||||
<value></value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.buildCommand</key>
|
|
||||||
<value>${NDKROOT}/ndk-build.cmd</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
|
|
||||||
<value>clean</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.contents</key>
|
|
||||||
<value>org.eclipse.cdt.make.core.activeConfigSettings</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
|
|
||||||
<value>true</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
|
|
||||||
<value>false</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.enableFullBuild</key>
|
|
||||||
<value>true</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.fullBuildTarget</key>
|
|
||||||
<value></value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.stopOnError</key>
|
|
||||||
<value>true</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
|
|
||||||
<value>false</value>
|
|
||||||
</dictionary>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.ApkBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
|
|
||||||
<triggers>full,incremental,</triggers>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
</buildSpec>
|
|
||||||
<natures>
|
|
||||||
<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
|
|
||||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
|
||||||
<nature>org.eclipse.cdt.core.cnature</nature>
|
|
||||||
<nature>org.eclipse.cdt.core.ccnature</nature>
|
|
||||||
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
|
|
||||||
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
|
||||||
</natures>
|
|
||||||
</projectDescription>
|
|
@ -1,4 +0,0 @@
|
|||||||
eclipse.preferences.version=1
|
|
||||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
|
|
||||||
org.eclipse.jdt.core.compiler.compliance=1.6
|
|
||||||
org.eclipse.jdt.core.compiler.source=1.6
|
|
@ -1,38 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
package="org.opencv.samples.facedetect"
|
|
||||||
android:versionCode="21"
|
|
||||||
android:versionName="2.1">
|
|
||||||
|
|
||||||
<application
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:icon="@drawable/icon"
|
|
||||||
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
|
|
||||||
|
|
||||||
<activity android:name="FdActivity"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:screenOrientation="landscape"
|
|
||||||
android:configChanges="keyboardHidden|orientation">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
</application>
|
|
||||||
|
|
||||||
<supports-screens android:resizeable="true"
|
|
||||||
android:smallScreens="true"
|
|
||||||
android:normalScreens="true"
|
|
||||||
android:largeScreens="true"
|
|
||||||
android:anyDensity="true" />
|
|
||||||
|
|
||||||
<uses-sdk android:minSdkVersion="8" />
|
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.CAMERA"/>
|
|
||||||
|
|
||||||
<uses-feature android:name="android.hardware.camera" android:required="false"/>
|
|
||||||
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
|
|
||||||
<uses-feature android:name="android.hardware.camera.front" android:required="false"/>
|
|
||||||
<uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>
|
|
||||||
|
|
||||||
</manifest>
|
|
@ -1,13 +0,0 @@
|
|||||||
set(sample example-face-detection)
|
|
||||||
|
|
||||||
if(BUILD_FAT_JAVA_LIB)
|
|
||||||
set(native_deps opencv_java)
|
|
||||||
else()
|
|
||||||
set(native_deps opencv_contrib)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
add_android_project(${sample} "${CMAKE_CURRENT_SOURCE_DIR}" LIBRARY_DEPS ${OpenCV_BINARY_DIR} SDK_TARGET 11 ${ANDROID_SDK_TARGET} NATIVE_DEPS ${native_deps})
|
|
||||||
if(TARGET ${sample})
|
|
||||||
add_dependencies(opencv_android_examples ${sample})
|
|
||||||
endif()
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
|||||||
LOCAL_PATH := $(call my-dir)
|
|
||||||
|
|
||||||
include $(CLEAR_VARS)
|
|
||||||
|
|
||||||
#OPENCV_CAMERA_MODULES:=off
|
|
||||||
#OPENCV_INSTALL_MODULES:=off
|
|
||||||
#OPENCV_LIB_TYPE:=SHARED
|
|
||||||
include ../../sdk/native/jni/OpenCV.mk
|
|
||||||
|
|
||||||
LOCAL_SRC_FILES := DetectionBasedTracker_jni.cpp
|
|
||||||
LOCAL_C_INCLUDES += $(LOCAL_PATH)
|
|
||||||
LOCAL_LDLIBS += -llog -ldl
|
|
||||||
|
|
||||||
LOCAL_MODULE := detection_based_tracker
|
|
||||||
|
|
||||||
include $(BUILD_SHARED_LIBRARY)
|
|
@ -1,4 +0,0 @@
|
|||||||
APP_STL := gnustl_static
|
|
||||||
APP_CPPFLAGS := -frtti -fexceptions
|
|
||||||
APP_ABI := armeabi-v7a
|
|
||||||
APP_PLATFORM := android-8
|
|
@ -1,249 +0,0 @@
|
|||||||
#include <DetectionBasedTracker_jni.h>
|
|
||||||
#include <opencv2/core/core.hpp>
|
|
||||||
#include <opencv2/contrib/detection_based_tracker.hpp>
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
#include <android/log.h>
|
|
||||||
|
|
||||||
#define LOG_TAG "FaceDetection/DetectionBasedTracker"
|
|
||||||
#define LOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__))
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
using namespace cv;
|
|
||||||
|
|
||||||
inline void vector_Rect_to_Mat(vector<Rect>& v_rect, Mat& mat)
|
|
||||||
{
|
|
||||||
mat = Mat(v_rect, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
class CascadeDetectorAdapter: public DetectionBasedTracker::IDetector
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
CascadeDetectorAdapter(cv::Ptr<cv::CascadeClassifier> detector):
|
|
||||||
IDetector(),
|
|
||||||
Detector(detector)
|
|
||||||
{
|
|
||||||
LOGD("CascadeDetectorAdapter::Detect::Detect");
|
|
||||||
CV_Assert(!detector.empty());
|
|
||||||
}
|
|
||||||
|
|
||||||
void detect(const cv::Mat &Image, std::vector<cv::Rect> &objects)
|
|
||||||
{
|
|
||||||
LOGD("CascadeDetectorAdapter::Detect: begin");
|
|
||||||
LOGD("CascadeDetectorAdapter::Detect: scaleFactor=%.2f, minNeighbours=%d, minObjSize=(%dx%d), maxObjSize=(%dx%d)", scaleFactor, minNeighbours, minObjSize.width, minObjSize.height, maxObjSize.width, maxObjSize.height);
|
|
||||||
Detector->detectMultiScale(Image, objects, scaleFactor, minNeighbours, 0, minObjSize, maxObjSize);
|
|
||||||
LOGD("CascadeDetectorAdapter::Detect: end");
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual ~CascadeDetectorAdapter()
|
|
||||||
{
|
|
||||||
LOGD("CascadeDetectorAdapter::Detect::~Detect");
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
CascadeDetectorAdapter();
|
|
||||||
cv::Ptr<cv::CascadeClassifier> Detector;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct DetectorAgregator
|
|
||||||
{
|
|
||||||
cv::Ptr<CascadeDetectorAdapter> mainDetector;
|
|
||||||
cv::Ptr<CascadeDetectorAdapter> trackingDetector;
|
|
||||||
|
|
||||||
cv::Ptr<DetectionBasedTracker> tracker;
|
|
||||||
DetectorAgregator(cv::Ptr<CascadeDetectorAdapter>& _mainDetector, cv::Ptr<CascadeDetectorAdapter>& _trackingDetector):
|
|
||||||
mainDetector(_mainDetector),
|
|
||||||
trackingDetector(_trackingDetector)
|
|
||||||
{
|
|
||||||
CV_Assert(!_mainDetector.empty());
|
|
||||||
CV_Assert(!_trackingDetector.empty());
|
|
||||||
|
|
||||||
DetectionBasedTracker::Parameters DetectorParams;
|
|
||||||
tracker = new DetectionBasedTracker(mainDetector.ptr<DetectionBasedTracker::IDetector>(), trackingDetector.ptr<DetectionBasedTracker::IDetector>(), DetectorParams);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
JNIEXPORT jlong JNICALL Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeCreateObject
|
|
||||||
(JNIEnv * jenv, jclass, jstring jFileName, jint faceSize)
|
|
||||||
{
|
|
||||||
LOGD("Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeCreateObject enter");
|
|
||||||
const char* jnamestr = jenv->GetStringUTFChars(jFileName, NULL);
|
|
||||||
string stdFileName(jnamestr);
|
|
||||||
jlong result = 0;
|
|
||||||
|
|
||||||
LOGD("Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeCreateObject");
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
cv::Ptr<CascadeDetectorAdapter> mainDetector = new CascadeDetectorAdapter(new CascadeClassifier(stdFileName));
|
|
||||||
cv::Ptr<CascadeDetectorAdapter> trackingDetector = new CascadeDetectorAdapter(new CascadeClassifier(stdFileName));
|
|
||||||
result = (jlong)new DetectorAgregator(mainDetector, trackingDetector);
|
|
||||||
if (faceSize > 0)
|
|
||||||
{
|
|
||||||
mainDetector->setMinObjectSize(Size(faceSize, faceSize));
|
|
||||||
//trackingDetector->setMinObjectSize(Size(faceSize, faceSize));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch(cv::Exception& e)
|
|
||||||
{
|
|
||||||
LOGD("nativeCreateObject caught cv::Exception: %s", e.what());
|
|
||||||
jclass je = jenv->FindClass("org/opencv/core/CvException");
|
|
||||||
if(!je)
|
|
||||||
je = jenv->FindClass("java/lang/Exception");
|
|
||||||
jenv->ThrowNew(je, e.what());
|
|
||||||
}
|
|
||||||
catch (...)
|
|
||||||
{
|
|
||||||
LOGD("nativeCreateObject caught unknown exception");
|
|
||||||
jclass je = jenv->FindClass("java/lang/Exception");
|
|
||||||
jenv->ThrowNew(je, "Unknown exception in JNI code {Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeCreateObject(...)}");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
LOGD("Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeCreateObject exit");
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeDestroyObject
|
|
||||||
(JNIEnv * jenv, jclass, jlong thiz)
|
|
||||||
{
|
|
||||||
LOGD("Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeDestroyObject");
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if(thiz != 0)
|
|
||||||
{
|
|
||||||
((DetectorAgregator*)thiz)->tracker->stop();
|
|
||||||
delete (DetectorAgregator*)thiz;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch(cv::Exception& e)
|
|
||||||
{
|
|
||||||
LOGD("nativeestroyObject caught cv::Exception: %s", e.what());
|
|
||||||
jclass je = jenv->FindClass("org/opencv/core/CvException");
|
|
||||||
if(!je)
|
|
||||||
je = jenv->FindClass("java/lang/Exception");
|
|
||||||
jenv->ThrowNew(je, e.what());
|
|
||||||
}
|
|
||||||
catch (...)
|
|
||||||
{
|
|
||||||
LOGD("nativeDestroyObject caught unknown exception");
|
|
||||||
jclass je = jenv->FindClass("java/lang/Exception");
|
|
||||||
jenv->ThrowNew(je, "Unknown exception in JNI code {Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeDestroyObject(...)}");
|
|
||||||
}
|
|
||||||
LOGD("Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeDestroyObject exit");
|
|
||||||
}
|
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeStart
|
|
||||||
(JNIEnv * jenv, jclass, jlong thiz)
|
|
||||||
{
|
|
||||||
LOGD("Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeStart");
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
((DetectorAgregator*)thiz)->tracker->run();
|
|
||||||
}
|
|
||||||
catch(cv::Exception& e)
|
|
||||||
{
|
|
||||||
LOGD("nativeStart caught cv::Exception: %s", e.what());
|
|
||||||
jclass je = jenv->FindClass("org/opencv/core/CvException");
|
|
||||||
if(!je)
|
|
||||||
je = jenv->FindClass("java/lang/Exception");
|
|
||||||
jenv->ThrowNew(je, e.what());
|
|
||||||
}
|
|
||||||
catch (...)
|
|
||||||
{
|
|
||||||
LOGD("nativeStart caught unknown exception");
|
|
||||||
jclass je = jenv->FindClass("java/lang/Exception");
|
|
||||||
jenv->ThrowNew(je, "Unknown exception in JNI code {Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeStart(...)}");
|
|
||||||
}
|
|
||||||
LOGD("Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeStart exit");
|
|
||||||
}
|
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeStop
|
|
||||||
(JNIEnv * jenv, jclass, jlong thiz)
|
|
||||||
{
|
|
||||||
LOGD("Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeStop");
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
((DetectorAgregator*)thiz)->tracker->stop();
|
|
||||||
}
|
|
||||||
catch(cv::Exception& e)
|
|
||||||
{
|
|
||||||
LOGD("nativeStop caught cv::Exception: %s", e.what());
|
|
||||||
jclass je = jenv->FindClass("org/opencv/core/CvException");
|
|
||||||
if(!je)
|
|
||||||
je = jenv->FindClass("java/lang/Exception");
|
|
||||||
jenv->ThrowNew(je, e.what());
|
|
||||||
}
|
|
||||||
catch (...)
|
|
||||||
{
|
|
||||||
LOGD("nativeStop caught unknown exception");
|
|
||||||
jclass je = jenv->FindClass("java/lang/Exception");
|
|
||||||
jenv->ThrowNew(je, "Unknown exception in JNI code {Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeStop(...)}");
|
|
||||||
}
|
|
||||||
LOGD("Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeStop exit");
|
|
||||||
}
|
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeSetFaceSize
|
|
||||||
(JNIEnv * jenv, jclass, jlong thiz, jint faceSize)
|
|
||||||
{
|
|
||||||
LOGD("Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeSetFaceSize -- BEGIN");
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (faceSize > 0)
|
|
||||||
{
|
|
||||||
((DetectorAgregator*)thiz)->mainDetector->setMinObjectSize(Size(faceSize, faceSize));
|
|
||||||
//((DetectorAgregator*)thiz)->trackingDetector->setMinObjectSize(Size(faceSize, faceSize));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch(cv::Exception& e)
|
|
||||||
{
|
|
||||||
LOGD("nativeStop caught cv::Exception: %s", e.what());
|
|
||||||
jclass je = jenv->FindClass("org/opencv/core/CvException");
|
|
||||||
if(!je)
|
|
||||||
je = jenv->FindClass("java/lang/Exception");
|
|
||||||
jenv->ThrowNew(je, e.what());
|
|
||||||
}
|
|
||||||
catch (...)
|
|
||||||
{
|
|
||||||
LOGD("nativeSetFaceSize caught unknown exception");
|
|
||||||
jclass je = jenv->FindClass("java/lang/Exception");
|
|
||||||
jenv->ThrowNew(je, "Unknown exception in JNI code {Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeSetFaceSize(...)}");
|
|
||||||
}
|
|
||||||
LOGD("Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeSetFaceSize -- END");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeDetect
|
|
||||||
(JNIEnv * jenv, jclass, jlong thiz, jlong imageGray, jlong faces)
|
|
||||||
{
|
|
||||||
LOGD("Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeDetect");
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
vector<Rect> RectFaces;
|
|
||||||
((DetectorAgregator*)thiz)->tracker->process(*((Mat*)imageGray));
|
|
||||||
((DetectorAgregator*)thiz)->tracker->getObjects(RectFaces);
|
|
||||||
*((Mat*)faces) = Mat(RectFaces, true);
|
|
||||||
}
|
|
||||||
catch(cv::Exception& e)
|
|
||||||
{
|
|
||||||
LOGD("nativeCreateObject caught cv::Exception: %s", e.what());
|
|
||||||
jclass je = jenv->FindClass("org/opencv/core/CvException");
|
|
||||||
if(!je)
|
|
||||||
je = jenv->FindClass("java/lang/Exception");
|
|
||||||
jenv->ThrowNew(je, e.what());
|
|
||||||
}
|
|
||||||
catch (...)
|
|
||||||
{
|
|
||||||
LOGD("nativeDetect caught unknown exception");
|
|
||||||
jclass je = jenv->FindClass("java/lang/Exception");
|
|
||||||
jenv->ThrowNew(je, "Unknown exception in JNI code {Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeDetect(...)}");
|
|
||||||
}
|
|
||||||
LOGD("Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeDetect END");
|
|
||||||
}
|
|
@ -1,61 +0,0 @@
|
|||||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
|
||||||
#include <jni.h>
|
|
||||||
/* Header for class org_opencv_samples_fd_DetectionBasedTracker */
|
|
||||||
|
|
||||||
#ifndef _Included_org_opencv_samples_fd_DetectionBasedTracker
|
|
||||||
#define _Included_org_opencv_samples_fd_DetectionBasedTracker
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
/*
|
|
||||||
* Class: org_opencv_samples_fd_DetectionBasedTracker
|
|
||||||
* Method: nativeCreateObject
|
|
||||||
* Signature: (Ljava/lang/String;F)J
|
|
||||||
*/
|
|
||||||
JNIEXPORT jlong JNICALL Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeCreateObject
|
|
||||||
(JNIEnv *, jclass, jstring, jint);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: org_opencv_samples_fd_DetectionBasedTracker
|
|
||||||
* Method: nativeDestroyObject
|
|
||||||
* Signature: (J)V
|
|
||||||
*/
|
|
||||||
JNIEXPORT void JNICALL Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeDestroyObject
|
|
||||||
(JNIEnv *, jclass, jlong);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: org_opencv_samples_fd_DetectionBasedTracker
|
|
||||||
* Method: nativeStart
|
|
||||||
* Signature: (J)V
|
|
||||||
*/
|
|
||||||
JNIEXPORT void JNICALL Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeStart
|
|
||||||
(JNIEnv *, jclass, jlong);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: org_opencv_samples_fd_DetectionBasedTracker
|
|
||||||
* Method: nativeStop
|
|
||||||
* Signature: (J)V
|
|
||||||
*/
|
|
||||||
JNIEXPORT void JNICALL Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeStop
|
|
||||||
(JNIEnv *, jclass, jlong);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: org_opencv_samples_fd_DetectionBasedTracker
|
|
||||||
* Method: nativeSetFaceSize
|
|
||||||
* Signature: (JI)V
|
|
||||||
*/
|
|
||||||
JNIEXPORT void JNICALL Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeSetFaceSize
|
|
||||||
(JNIEnv *, jclass, jlong, jint);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: org_opencv_samples_fd_DetectionBasedTracker
|
|
||||||
* Method: nativeDetect
|
|
||||||
* Signature: (JJJ)V
|
|
||||||
*/
|
|
||||||
JNIEXPORT void JNICALL Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeDetect
|
|
||||||
(JNIEnv *, jclass, jlong, jlong, jlong);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
Before Width: | Height: | Size: 2.0 KiB |
@ -1,11 +0,0 @@
|
|||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent" >
|
|
||||||
|
|
||||||
<org.opencv.android.JavaCameraView
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="fill_parent"
|
|
||||||
android:id="@+id/fd_activity_surface_view" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
@ -1,4 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<string name="app_name">OCV Face Detection</string>
|
|
||||||
</resources>
|
|
@ -1,41 +0,0 @@
|
|||||||
package org.opencv.samples.facedetect;
|
|
||||||
|
|
||||||
import org.opencv.core.Mat;
|
|
||||||
import org.opencv.core.MatOfRect;
|
|
||||||
|
|
||||||
public class DetectionBasedTracker
|
|
||||||
{
|
|
||||||
public DetectionBasedTracker(String cascadeName, int minFaceSize) {
|
|
||||||
mNativeObj = nativeCreateObject(cascadeName, minFaceSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void start() {
|
|
||||||
nativeStart(mNativeObj);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void stop() {
|
|
||||||
nativeStop(mNativeObj);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMinFaceSize(int size) {
|
|
||||||
nativeSetFaceSize(mNativeObj, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void detect(Mat imageGray, MatOfRect faces) {
|
|
||||||
nativeDetect(mNativeObj, imageGray.getNativeObjAddr(), faces.getNativeObjAddr());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void release() {
|
|
||||||
nativeDestroyObject(mNativeObj);
|
|
||||||
mNativeObj = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
private long mNativeObj = 0;
|
|
||||||
|
|
||||||
private static native long nativeCreateObject(String cascadeName, int minFaceSize);
|
|
||||||
private static native void nativeDestroyObject(long thiz);
|
|
||||||
private static native void nativeStart(long thiz);
|
|
||||||
private static native void nativeStop(long thiz);
|
|
||||||
private static native void nativeSetFaceSize(long thiz, int size);
|
|
||||||
private static native void nativeDetect(long thiz, long inputImage, long faces);
|
|
||||||
}
|
|
@ -1,66 +0,0 @@
|
|||||||
CMAKE_MINIMUM_REQUIRED( VERSION 2.8 )
|
|
||||||
|
|
||||||
#########################################################
|
|
||||||
# Set project name
|
|
||||||
#########################################################
|
|
||||||
|
|
||||||
IF( NOT PROJECT_NAME )
|
|
||||||
IF ( NOT "x$ENV{PROJECT_NAME}" STREQUAL "x" )
|
|
||||||
SET( PROJECT_NAME $ENV{PROJECT_NAME} )
|
|
||||||
ELSE()
|
|
||||||
SET( PROJECT_NAME hello-android )
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
SET( PROJECT_NAME ${PROJECT_NAME} CACHE STRING "The name of your project")
|
|
||||||
|
|
||||||
PROJECT( ${PROJECT_NAME} )
|
|
||||||
|
|
||||||
#########################################################
|
|
||||||
# Find OpenCV
|
|
||||||
#########################################################
|
|
||||||
|
|
||||||
FIND_PACKAGE( OpenCV REQUIRED )
|
|
||||||
|
|
||||||
#########################################################
|
|
||||||
# c/c++ flags, includes and lib dependencies
|
|
||||||
#########################################################
|
|
||||||
|
|
||||||
#notice the "recycling" of CMAKE_C_FLAGS
|
|
||||||
#this is necessary to pick up android flags
|
|
||||||
SET( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -pedantic" )
|
|
||||||
SET( CMAKE_CPP_FLAGS "${CMAKE_CPP_FLAGS} -Wall -pedantic" )
|
|
||||||
|
|
||||||
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
|
|
||||||
|
|
||||||
SET( LIBRARY_DEPS ${OpenCV_LIBS} )
|
|
||||||
IF( ANDROID )
|
|
||||||
SET( LIBRARY_DEPS ${LIBRARY_DEPS} log dl )
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
#########################################################
|
|
||||||
# source files
|
|
||||||
#########################################################
|
|
||||||
|
|
||||||
FILE( GLOB hdrs "*.h*" )
|
|
||||||
FILE( GLOB srcs "*.cpp" )
|
|
||||||
|
|
||||||
ADD_EXECUTABLE( ${PROJECT_NAME} ${srcs} )
|
|
||||||
TARGET_LINK_LIBRARIES( ${PROJECT_NAME} ${LIBRARY_DEPS} )
|
|
||||||
|
|
||||||
#########################################################
|
|
||||||
# Summary report
|
|
||||||
#########################################################
|
|
||||||
message( STATUS "")
|
|
||||||
message( STATUS "General configuration for ${PROJECT_NAME} =====================================")
|
|
||||||
message( STATUS "")
|
|
||||||
message( STATUS " OpenCV path: ${OpenCV_DIR}")
|
|
||||||
message( STATUS " Compiler: ${CMAKE_CXX_COMPILER}")
|
|
||||||
message( STATUS " C++ flags (Release): ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE}")
|
|
||||||
message( STATUS " C++ flags (Debug): ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG}")
|
|
||||||
if(WIN32)
|
|
||||||
message( STATUS " Linker flags (Release): ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
|
|
||||||
message( STATUS " Linker flags (Debug): ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
|
|
||||||
else()
|
|
||||||
message( STATUS " Linker flags (Release): ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_RELEASE}")
|
|
||||||
message( STATUS " Linker flags (Debug): ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_DEBUG}")
|
|
||||||
endif()
|
|
@ -1,9 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
SETLOCAL
|
|
||||||
PUSHD %~dp0
|
|
||||||
SET PROJECT_NAME=hello-android
|
|
||||||
SET BUILD_DIR=build_armeabi
|
|
||||||
SET ANDROID_ABI=armeabi
|
|
||||||
CALL ..\..\..\android\scripts\build.cmd %*
|
|
||||||
POPD
|
|
||||||
ENDLOCAL
|
|
@ -1,13 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
cd `dirname $0`
|
|
||||||
|
|
||||||
BUILD_DIR=build_armeabi
|
|
||||||
opencv_android=`pwd`/../../../android
|
|
||||||
opencv_build_dir=$opencv_android/$BUILD_DIR
|
|
||||||
|
|
||||||
mkdir -p $BUILD_DIR
|
|
||||||
cd $BUILD_DIR
|
|
||||||
|
|
||||||
RUN_CMAKE="cmake -DOpenCV_DIR=$opencv_build_dir -DARM_TARGET=armeabi -DCMAKE_TOOLCHAIN_FILE=$opencv_android/android.toolchain.cmake .."
|
|
||||||
echo $RUN_CMAKE
|
|
||||||
$RUN_CMAKE
|
|
@ -1,49 +0,0 @@
|
|||||||
:: this batch file copies compiled executable to the device,
|
|
||||||
:: runs it and gets resulting image back to the host
|
|
||||||
::
|
|
||||||
:: Here is sample output of successful run:
|
|
||||||
::
|
|
||||||
:: 204 KB/s (2887388 bytes in 13.790s)
|
|
||||||
:: Hello Android!
|
|
||||||
:: 304 KB/s (8723 bytes in 0.028s)
|
|
||||||
|
|
||||||
@ECHO OFF
|
|
||||||
|
|
||||||
:: enable command extensions
|
|
||||||
VERIFY BADVALUE 2>NUL
|
|
||||||
SETLOCAL ENABLEEXTENSIONS || (ECHO Unable to enable command extensions. & EXIT \B)
|
|
||||||
|
|
||||||
PUSHD %~dp0
|
|
||||||
:: project specific settings
|
|
||||||
SET PROJECT_NAME=hello-android
|
|
||||||
|
|
||||||
:: try to load config file
|
|
||||||
SET CFG_PATH=..\..\..\android\scripts\wincfg.cmd
|
|
||||||
IF EXIST %CFG_PATH% CALL %CFG_PATH%
|
|
||||||
|
|
||||||
:: check if sdk path defined
|
|
||||||
IF NOT DEFINED ANDROID_SDK (ECHO. & ECHO You should set an environment variable ANDROID_SDK to the full path to your copy of Android SDK & GOTO end)
|
|
||||||
(PUSHD "%ANDROID_SDK%" 2>NUL && POPD) || (ECHO. & ECHO Directory "%ANDROID_SDK%" specified by ANDROID_SDK variable does not exist & GOTO end)
|
|
||||||
SET adb=%ANDROID_SDK%\platform-tools\adb.exe
|
|
||||||
|
|
||||||
:: copy file to device (usually takes 10 seconds or more)
|
|
||||||
%adb% push .\bin\%PROJECT_NAME% /data/bin/sample/%PROJECT_NAME% || GOTO end
|
|
||||||
|
|
||||||
:: set execute permission
|
|
||||||
%adb% shell chmod 777 /data/bin/sample/%PROJECT_NAME% || GOTO end
|
|
||||||
|
|
||||||
:: execute our application
|
|
||||||
%adb% shell /data/bin/sample/%PROJECT_NAME% || GOTO end
|
|
||||||
|
|
||||||
:: get image result from device
|
|
||||||
%adb% pull /mnt/sdcard/HelloAndroid.png || GOTO end
|
|
||||||
|
|
||||||
GOTO end
|
|
||||||
|
|
||||||
:: cleanup (comment out GOTO above to enable cleanup)
|
|
||||||
%adb% shell rm /data/bin/sample/%PROJECT_NAME%
|
|
||||||
%adb% shell rm /mnt/sdcard/HelloAndroid.png
|
|
||||||
|
|
||||||
:end
|
|
||||||
POPD
|
|
||||||
ENDLOCAL
|
|
@ -1,15 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
cd `dirname $0`
|
|
||||||
PROJECT_NAME=hello-android
|
|
||||||
|
|
||||||
# copy file to device (usually takes 10 seconds or more)
|
|
||||||
adb push ./bin/$PROJECT_NAME /data/bin/sample/$PROJECT_NAME || return
|
|
||||||
|
|
||||||
# set execute permission
|
|
||||||
adb shell chmod 777 /data/bin/sample/$PROJECT_NAME || return
|
|
||||||
|
|
||||||
# execute our application
|
|
||||||
adb shell /data/bin/sample/$PROJECT_NAME || return
|
|
||||||
|
|
||||||
# get image result from device
|
|
||||||
adb pull /mnt/sdcard/HelloAndroid.png || return
|
|
@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<classpath>
|
|
||||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
|
||||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
|
||||||
<classpathentry kind="src" path="src"/>
|
|
||||||
<classpathentry kind="src" path="gen"/>
|
|
||||||
<classpathentry kind="output" path="bin/classes"/>
|
|
||||||
</classpath>
|
|
@ -1,33 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<projectDescription>
|
|
||||||
<name>OpenCV Sample - image-manipulations</name>
|
|
||||||
<comment></comment>
|
|
||||||
<projects>
|
|
||||||
</projects>
|
|
||||||
<buildSpec>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.ApkBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
</buildSpec>
|
|
||||||
<natures>
|
|
||||||
<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
|
|
||||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
|
||||||
</natures>
|
|
||||||
</projectDescription>
|
|
@ -1,4 +0,0 @@
|
|||||||
eclipse.preferences.version=1
|
|
||||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
|
|
||||||
org.eclipse.jdt.core.compiler.compliance=1.6
|
|
||||||
org.eclipse.jdt.core.compiler.source=1.6
|
|
@ -1,38 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
package="org.opencv.samples.imagemanipulations"
|
|
||||||
android:versionCode="21"
|
|
||||||
android:versionName="2.1">
|
|
||||||
|
|
||||||
<application
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:icon="@drawable/icon"
|
|
||||||
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
|
|
||||||
|
|
||||||
<activity android:name="ImageManipulationsActivity"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:screenOrientation="landscape"
|
|
||||||
android:configChanges="keyboardHidden|orientation">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
</application>
|
|
||||||
|
|
||||||
<supports-screens android:resizeable="true"
|
|
||||||
android:smallScreens="true"
|
|
||||||
android:normalScreens="true"
|
|
||||||
android:largeScreens="true"
|
|
||||||
android:anyDensity="true" />
|
|
||||||
|
|
||||||
<uses-sdk android:minSdkVersion="8" />
|
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.CAMERA"/>
|
|
||||||
|
|
||||||
<uses-feature android:name="android.hardware.camera" android:required="false"/>
|
|
||||||
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
|
|
||||||
<uses-feature android:name="android.hardware.camera.front" android:required="false"/>
|
|
||||||
<uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>
|
|
||||||
|
|
||||||
</manifest>
|
|
@ -1,6 +0,0 @@
|
|||||||
set(sample example-image-manipulations)
|
|
||||||
|
|
||||||
add_android_project(${sample} "${CMAKE_CURRENT_SOURCE_DIR}" LIBRARY_DEPS ${OpenCV_BINARY_DIR} SDK_TARGET 11 ${ANDROID_SDK_TARGET})
|
|
||||||
if(TARGET ${sample})
|
|
||||||
add_dependencies(opencv_android_examples ${sample})
|
|
||||||
endif()
|
|
Before Width: | Height: | Size: 2.0 KiB |
@ -1,11 +0,0 @@
|
|||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent" >
|
|
||||||
|
|
||||||
<org.opencv.android.JavaCameraView
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="fill_parent"
|
|
||||||
android:id="@+id/image_manipulations_activity_surface_view" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
@ -1,4 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<string name="app_name">OCV Image Manipulations</string>
|
|
||||||
</resources>
|
|
@ -1,362 +0,0 @@
|
|||||||
package org.opencv.samples.imagemanipulations;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
import org.opencv.android.BaseLoaderCallback;
|
|
||||||
import org.opencv.android.CameraBridgeViewBase.CvCameraViewFrame;
|
|
||||||
import org.opencv.android.LoaderCallbackInterface;
|
|
||||||
import org.opencv.android.OpenCVLoader;
|
|
||||||
import org.opencv.core.Core;
|
|
||||||
import org.opencv.core.CvType;
|
|
||||||
import org.opencv.core.Mat;
|
|
||||||
import org.opencv.core.MatOfFloat;
|
|
||||||
import org.opencv.core.MatOfInt;
|
|
||||||
import org.opencv.core.Point;
|
|
||||||
import org.opencv.core.Scalar;
|
|
||||||
import org.opencv.core.Size;
|
|
||||||
import org.opencv.android.CameraBridgeViewBase;
|
|
||||||
import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener2;
|
|
||||||
import org.opencv.imgproc.Imgproc;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.util.Log;
|
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuItem;
|
|
||||||
import android.view.WindowManager;
|
|
||||||
|
|
||||||
public class ImageManipulationsActivity extends Activity implements CvCameraViewListener2 {
|
|
||||||
private static final String TAG = "OCVSample::Activity";
|
|
||||||
|
|
||||||
public static final int VIEW_MODE_RGBA = 0;
|
|
||||||
public static final int VIEW_MODE_HIST = 1;
|
|
||||||
public static final int VIEW_MODE_CANNY = 2;
|
|
||||||
public static final int VIEW_MODE_SEPIA = 3;
|
|
||||||
public static final int VIEW_MODE_SOBEL = 4;
|
|
||||||
public static final int VIEW_MODE_ZOOM = 5;
|
|
||||||
public static final int VIEW_MODE_PIXELIZE = 6;
|
|
||||||
public static final int VIEW_MODE_POSTERIZE = 7;
|
|
||||||
|
|
||||||
private MenuItem mItemPreviewRGBA;
|
|
||||||
private MenuItem mItemPreviewHist;
|
|
||||||
private MenuItem mItemPreviewCanny;
|
|
||||||
private MenuItem mItemPreviewSepia;
|
|
||||||
private MenuItem mItemPreviewSobel;
|
|
||||||
private MenuItem mItemPreviewZoom;
|
|
||||||
private MenuItem mItemPreviewPixelize;
|
|
||||||
private MenuItem mItemPreviewPosterize;
|
|
||||||
private CameraBridgeViewBase mOpenCvCameraView;
|
|
||||||
|
|
||||||
private Size mSize0;
|
|
||||||
private Size mSizeRgba;
|
|
||||||
private Size mSizeRgbaInner;
|
|
||||||
|
|
||||||
private Mat mRgba;
|
|
||||||
private Mat mGray;
|
|
||||||
private Mat mIntermediateMat;
|
|
||||||
private Mat mHist;
|
|
||||||
private Mat mMat0;
|
|
||||||
private MatOfInt mChannels[];
|
|
||||||
private MatOfInt mHistSize;
|
|
||||||
private int mHistSizeNum;
|
|
||||||
private MatOfFloat mRanges;
|
|
||||||
private Scalar mColorsRGB[];
|
|
||||||
private Scalar mColorsHue[];
|
|
||||||
private Scalar mWhilte;
|
|
||||||
private Point mP1;
|
|
||||||
private Point mP2;
|
|
||||||
private float mBuff[];
|
|
||||||
private Mat mRgbaInnerWindow;
|
|
||||||
private Mat mGrayInnerWindow;
|
|
||||||
private Mat mZoomWindow;
|
|
||||||
private Mat mZoomCorner;
|
|
||||||
private Mat mSepiaKernel;
|
|
||||||
|
|
||||||
public static int viewMode = VIEW_MODE_RGBA;
|
|
||||||
|
|
||||||
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
|
|
||||||
@Override
|
|
||||||
public void onManagerConnected(int status) {
|
|
||||||
switch (status) {
|
|
||||||
case LoaderCallbackInterface.SUCCESS:
|
|
||||||
{
|
|
||||||
Log.i(TAG, "OpenCV loaded successfully");
|
|
||||||
mOpenCvCameraView.enableView();
|
|
||||||
} break;
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
super.onManagerConnected(status);
|
|
||||||
} break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public ImageManipulationsActivity() {
|
|
||||||
Log.i(TAG, "Instantiated new " + this.getClass());
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Called when the activity is first created. */
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
Log.i(TAG, "called onCreate");
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
|
||||||
|
|
||||||
setContentView(R.layout.image_manipulations_surface_view);
|
|
||||||
|
|
||||||
mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.image_manipulations_activity_surface_view);
|
|
||||||
mOpenCvCameraView.setCvCameraViewListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPause()
|
|
||||||
{
|
|
||||||
super.onPause();
|
|
||||||
if (mOpenCvCameraView != null)
|
|
||||||
mOpenCvCameraView.disableView();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResume()
|
|
||||||
{
|
|
||||||
super.onResume();
|
|
||||||
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onDestroy() {
|
|
||||||
super.onDestroy();
|
|
||||||
if (mOpenCvCameraView != null)
|
|
||||||
mOpenCvCameraView.disableView();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
|
||||||
Log.i(TAG, "called onCreateOptionsMenu");
|
|
||||||
mItemPreviewRGBA = menu.add("Preview RGBA");
|
|
||||||
mItemPreviewHist = menu.add("Histograms");
|
|
||||||
mItemPreviewCanny = menu.add("Canny");
|
|
||||||
mItemPreviewSepia = menu.add("Sepia");
|
|
||||||
mItemPreviewSobel = menu.add("Sobel");
|
|
||||||
mItemPreviewZoom = menu.add("Zoom");
|
|
||||||
mItemPreviewPixelize = menu.add("Pixelize");
|
|
||||||
mItemPreviewPosterize = menu.add("Posterize");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
|
||||||
Log.i(TAG, "called onOptionsItemSelected; selected item: " + item);
|
|
||||||
if (item == mItemPreviewRGBA)
|
|
||||||
viewMode = VIEW_MODE_RGBA;
|
|
||||||
if (item == mItemPreviewHist)
|
|
||||||
viewMode = VIEW_MODE_HIST;
|
|
||||||
else if (item == mItemPreviewCanny)
|
|
||||||
viewMode = VIEW_MODE_CANNY;
|
|
||||||
else if (item == mItemPreviewSepia)
|
|
||||||
viewMode = VIEW_MODE_SEPIA;
|
|
||||||
else if (item == mItemPreviewSobel)
|
|
||||||
viewMode = VIEW_MODE_SOBEL;
|
|
||||||
else if (item == mItemPreviewZoom)
|
|
||||||
viewMode = VIEW_MODE_ZOOM;
|
|
||||||
else if (item == mItemPreviewPixelize)
|
|
||||||
viewMode = VIEW_MODE_PIXELIZE;
|
|
||||||
else if (item == mItemPreviewPosterize)
|
|
||||||
viewMode = VIEW_MODE_POSTERIZE;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onCameraViewStarted(int width, int height) {
|
|
||||||
mGray = new Mat();
|
|
||||||
mRgba = new Mat();
|
|
||||||
mIntermediateMat = new Mat();
|
|
||||||
mSize0 = new Size();
|
|
||||||
mHist = new Mat();
|
|
||||||
mChannels = new MatOfInt[] { new MatOfInt(0), new MatOfInt(1), new MatOfInt(2) };
|
|
||||||
mHistSizeNum = 25;
|
|
||||||
mBuff = new float[mHistSizeNum];
|
|
||||||
mHistSize = new MatOfInt(mHistSizeNum);
|
|
||||||
mRanges = new MatOfFloat(0f, 256f);
|
|
||||||
mMat0 = new Mat();
|
|
||||||
mColorsRGB = new Scalar[] { new Scalar(200, 0, 0, 255), new Scalar(0, 200, 0, 255), new Scalar(0, 0, 200, 255) };
|
|
||||||
mColorsHue = new Scalar[] {
|
|
||||||
new Scalar(255, 0, 0, 255), new Scalar(255, 60, 0, 255), new Scalar(255, 120, 0, 255), new Scalar(255, 180, 0, 255), new Scalar(255, 240, 0, 255),
|
|
||||||
new Scalar(215, 213, 0, 255), new Scalar(150, 255, 0, 255), new Scalar(85, 255, 0, 255), new Scalar(20, 255, 0, 255), new Scalar(0, 255, 30, 255),
|
|
||||||
new Scalar(0, 255, 85, 255), new Scalar(0, 255, 150, 255), new Scalar(0, 255, 215, 255), new Scalar(0, 234, 255, 255), new Scalar(0, 170, 255, 255),
|
|
||||||
new Scalar(0, 120, 255, 255), new Scalar(0, 60, 255, 255), new Scalar(0, 0, 255, 255), new Scalar(64, 0, 255, 255), new Scalar(120, 0, 255, 255),
|
|
||||||
new Scalar(180, 0, 255, 255), new Scalar(255, 0, 255, 255), new Scalar(255, 0, 215, 255), new Scalar(255, 0, 85, 255), new Scalar(255, 0, 0, 255)
|
|
||||||
};
|
|
||||||
mWhilte = Scalar.all(255);
|
|
||||||
mP1 = new Point();
|
|
||||||
mP2 = new Point();
|
|
||||||
|
|
||||||
// Fill sepia kernel
|
|
||||||
mSepiaKernel = new Mat(4, 4, CvType.CV_32F);
|
|
||||||
mSepiaKernel.put(0, 0, /* R */0.189f, 0.769f, 0.393f, 0f);
|
|
||||||
mSepiaKernel.put(1, 0, /* G */0.168f, 0.686f, 0.349f, 0f);
|
|
||||||
mSepiaKernel.put(2, 0, /* B */0.131f, 0.534f, 0.272f, 0f);
|
|
||||||
mSepiaKernel.put(3, 0, /* A */0.000f, 0.000f, 0.000f, 1f);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CreateAuxiliaryMats() {
|
|
||||||
if (mRgba.empty())
|
|
||||||
return;
|
|
||||||
|
|
||||||
mSizeRgba = mRgba.size();
|
|
||||||
|
|
||||||
int rows = (int) mSizeRgba.height;
|
|
||||||
int cols = (int) mSizeRgba.width;
|
|
||||||
|
|
||||||
int left = cols / 8;
|
|
||||||
int top = rows / 8;
|
|
||||||
|
|
||||||
int width = cols * 3 / 4;
|
|
||||||
int height = rows * 3 / 4;
|
|
||||||
|
|
||||||
if (mRgbaInnerWindow == null)
|
|
||||||
mRgbaInnerWindow = mRgba.submat(top, top + height, left, left + width);
|
|
||||||
mSizeRgbaInner = mRgbaInnerWindow.size();
|
|
||||||
|
|
||||||
if (mGrayInnerWindow == null && !mGray.empty())
|
|
||||||
mGrayInnerWindow = mGray.submat(top, top + height, left, left + width);
|
|
||||||
|
|
||||||
if (mZoomCorner == null)
|
|
||||||
mZoomCorner = mRgba.submat(0, rows / 2 - rows / 10, 0, cols / 2 - cols / 10);
|
|
||||||
|
|
||||||
if (mZoomWindow == null)
|
|
||||||
mZoomWindow = mRgba.submat(rows / 2 - 9 * rows / 100, rows / 2 + 9 * rows / 100, cols / 2 - 9 * cols / 100, cols / 2 + 9 * cols / 100);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onCameraViewStopped() {
|
|
||||||
// Explicitly deallocate Mats
|
|
||||||
if (mZoomWindow != null)
|
|
||||||
mZoomWindow.release();
|
|
||||||
if (mZoomCorner != null)
|
|
||||||
mZoomCorner.release();
|
|
||||||
if (mGrayInnerWindow != null)
|
|
||||||
mGrayInnerWindow.release();
|
|
||||||
if (mRgbaInnerWindow != null)
|
|
||||||
mRgbaInnerWindow.release();
|
|
||||||
if (mRgba != null)
|
|
||||||
mRgba.release();
|
|
||||||
if (mGray != null)
|
|
||||||
mGray.release();
|
|
||||||
if (mIntermediateMat != null)
|
|
||||||
mIntermediateMat.release();
|
|
||||||
|
|
||||||
mRgba = null;
|
|
||||||
mGray = null;
|
|
||||||
mIntermediateMat = null;
|
|
||||||
mRgbaInnerWindow = null;
|
|
||||||
mGrayInnerWindow = null;
|
|
||||||
mZoomCorner = null;
|
|
||||||
mZoomWindow = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
|
|
||||||
mRgba = inputFrame.rgba();
|
|
||||||
|
|
||||||
switch (ImageManipulationsActivity.viewMode) {
|
|
||||||
case ImageManipulationsActivity.VIEW_MODE_RGBA:
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ImageManipulationsActivity.VIEW_MODE_HIST:
|
|
||||||
if ((mSizeRgba == null) || (mRgba.cols() != mSizeRgba.width) || (mRgba.height() != mSizeRgba.height))
|
|
||||||
CreateAuxiliaryMats();
|
|
||||||
int thikness = (int) (mSizeRgba.width / (mHistSizeNum + 10) / 5);
|
|
||||||
if(thikness > 5) thikness = 5;
|
|
||||||
int offset = (int) ((mSizeRgba.width - (5*mHistSizeNum + 4*10)*thikness)/2);
|
|
||||||
// RGB
|
|
||||||
for(int c=0; c<3; c++) {
|
|
||||||
Imgproc.calcHist(Arrays.asList(mRgba), mChannels[c], mMat0, mHist, mHistSize, mRanges);
|
|
||||||
Core.normalize(mHist, mHist, mSizeRgba.height/2, 0, Core.NORM_INF);
|
|
||||||
mHist.get(0, 0, mBuff);
|
|
||||||
for(int h=0; h<mHistSizeNum; h++) {
|
|
||||||
mP1.x = mP2.x = offset + (c * (mHistSizeNum + 10) + h) * thikness;
|
|
||||||
mP1.y = mSizeRgba.height-1;
|
|
||||||
mP2.y = mP1.y - 2 - (int)mBuff[h];
|
|
||||||
Core.line(mRgba, mP1, mP2, mColorsRGB[c], thikness);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Value and Hue
|
|
||||||
Imgproc.cvtColor(mRgba, mIntermediateMat, Imgproc.COLOR_RGB2HSV_FULL);
|
|
||||||
// Value
|
|
||||||
Imgproc.calcHist(Arrays.asList(mIntermediateMat), mChannels[2], mMat0, mHist, mHistSize, mRanges);
|
|
||||||
Core.normalize(mHist, mHist, mSizeRgba.height/2, 0, Core.NORM_INF);
|
|
||||||
mHist.get(0, 0, mBuff);
|
|
||||||
for(int h=0; h<mHistSizeNum; h++) {
|
|
||||||
mP1.x = mP2.x = offset + (3 * (mHistSizeNum + 10) + h) * thikness;
|
|
||||||
mP1.y = mSizeRgba.height-1;
|
|
||||||
mP2.y = mP1.y - 2 - (int)mBuff[h];
|
|
||||||
Core.line(mRgba, mP1, mP2, mWhilte, thikness);
|
|
||||||
}
|
|
||||||
// Hue
|
|
||||||
Imgproc.calcHist(Arrays.asList(mIntermediateMat), mChannels[0], mMat0, mHist, mHistSize, mRanges);
|
|
||||||
Core.normalize(mHist, mHist, mSizeRgba.height/2, 0, Core.NORM_INF);
|
|
||||||
mHist.get(0, 0, mBuff);
|
|
||||||
for(int h=0; h<mHistSizeNum; h++) {
|
|
||||||
mP1.x = mP2.x = offset + (4 * (mHistSizeNum + 10) + h) * thikness;
|
|
||||||
mP1.y = mSizeRgba.height-1;
|
|
||||||
mP2.y = mP1.y - 2 - (int)mBuff[h];
|
|
||||||
Core.line(mRgba, mP1, mP2, mColorsHue[h], thikness);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ImageManipulationsActivity.VIEW_MODE_CANNY:
|
|
||||||
if ((mRgbaInnerWindow == null) || (mGrayInnerWindow == null) || (mRgba.cols() != mSizeRgba.width) || (mRgba.height() != mSizeRgba.height))
|
|
||||||
CreateAuxiliaryMats();
|
|
||||||
Imgproc.Canny(mRgbaInnerWindow, mIntermediateMat, 80, 90);
|
|
||||||
Imgproc.cvtColor(mIntermediateMat, mRgbaInnerWindow, Imgproc.COLOR_GRAY2BGRA, 4);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ImageManipulationsActivity.VIEW_MODE_SOBEL:
|
|
||||||
mGray = inputFrame.gray();
|
|
||||||
|
|
||||||
if ((mRgbaInnerWindow == null) || (mGrayInnerWindow == null) || (mRgba.cols() != mSizeRgba.width) || (mRgba.height() != mSizeRgba.height))
|
|
||||||
CreateAuxiliaryMats();
|
|
||||||
|
|
||||||
Imgproc.Sobel(mGrayInnerWindow, mIntermediateMat, CvType.CV_8U, 1, 1);
|
|
||||||
Core.convertScaleAbs(mIntermediateMat, mIntermediateMat, 10, 0);
|
|
||||||
Imgproc.cvtColor(mIntermediateMat, mRgbaInnerWindow, Imgproc.COLOR_GRAY2BGRA, 4);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ImageManipulationsActivity.VIEW_MODE_SEPIA:
|
|
||||||
if ((mRgbaInnerWindow == null) || (mRgba.cols() != mSizeRgba.width) || (mRgba.height() != mSizeRgba.height))
|
|
||||||
CreateAuxiliaryMats();
|
|
||||||
Core.transform(mRgbaInnerWindow, mRgbaInnerWindow, mSepiaKernel);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ImageManipulationsActivity.VIEW_MODE_ZOOM:
|
|
||||||
if ((mZoomCorner == null) || (mZoomWindow == null) || (mRgba.cols() != mSizeRgba.width) || (mRgba.height() != mSizeRgba.height))
|
|
||||||
CreateAuxiliaryMats();
|
|
||||||
Imgproc.resize(mZoomWindow, mZoomCorner, mZoomCorner.size());
|
|
||||||
|
|
||||||
Size wsize = mZoomWindow.size();
|
|
||||||
Core.rectangle(mZoomWindow, new Point(1, 1), new Point(wsize.width - 2, wsize.height - 2), new Scalar(255, 0, 0, 255), 2);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ImageManipulationsActivity.VIEW_MODE_PIXELIZE:
|
|
||||||
if ((mRgbaInnerWindow == null) || (mRgba.cols() != mSizeRgba.width) || (mRgba.height() != mSizeRgba.height))
|
|
||||||
CreateAuxiliaryMats();
|
|
||||||
Imgproc.resize(mRgbaInnerWindow, mIntermediateMat, mSize0, 0.1, 0.1, Imgproc.INTER_NEAREST);
|
|
||||||
Imgproc.resize(mIntermediateMat, mRgbaInnerWindow, mSizeRgbaInner, 0., 0., Imgproc.INTER_NEAREST);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ImageManipulationsActivity.VIEW_MODE_POSTERIZE:
|
|
||||||
if ((mRgbaInnerWindow == null) || (mRgba.cols() != mSizeRgba.width) || (mRgba.height() != mSizeRgba.height))
|
|
||||||
CreateAuxiliaryMats();
|
|
||||||
/*
|
|
||||||
Imgproc.cvtColor(mRgbaInnerWindow, mIntermediateMat, Imgproc.COLOR_RGBA2RGB);
|
|
||||||
Imgproc.pyrMeanShiftFiltering(mIntermediateMat, mIntermediateMat, 5, 50);
|
|
||||||
Imgproc.cvtColor(mIntermediateMat, mRgbaInnerWindow, Imgproc.COLOR_RGB2RGBA);
|
|
||||||
*/
|
|
||||||
|
|
||||||
Imgproc.Canny(mRgbaInnerWindow, mIntermediateMat, 80, 90);
|
|
||||||
mRgbaInnerWindow.setTo(new Scalar(0, 0, 0, 255), mIntermediateMat);
|
|
||||||
Core.convertScaleAbs(mRgbaInnerWindow, mIntermediateMat, 1./16, 0);
|
|
||||||
Core.convertScaleAbs(mIntermediateMat, mRgbaInnerWindow, 16, 0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return mRgba;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<classpath>
|
|
||||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
|
||||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
|
||||||
<classpathentry kind="src" path="src"/>
|
|
||||||
<classpathentry kind="src" path="gen"/>
|
|
||||||
<classpathentry kind="output" path="bin/classes"/>
|
|
||||||
</classpath>
|
|
@ -1,33 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<projectDescription>
|
|
||||||
<name>OpenCV Tutorial 1 - Camera Preview</name>
|
|
||||||
<comment></comment>
|
|
||||||
<projects>
|
|
||||||
</projects>
|
|
||||||
<buildSpec>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.ApkBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
</buildSpec>
|
|
||||||
<natures>
|
|
||||||
<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
|
|
||||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
|
||||||
</natures>
|
|
||||||
</projectDescription>
|
|
@ -1,4 +0,0 @@
|
|||||||
eclipse.preferences.version=1
|
|
||||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
|
|
||||||
org.eclipse.jdt.core.compiler.compliance=1.6
|
|
||||||
org.eclipse.jdt.core.compiler.source=1.6
|
|
@ -1,38 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
package="org.opencv.samples.tutorial1"
|
|
||||||
android:versionCode="21"
|
|
||||||
android:versionName="2.1">
|
|
||||||
|
|
||||||
<application
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:icon="@drawable/icon"
|
|
||||||
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
|
|
||||||
|
|
||||||
<activity android:name="Tutorial1Activity"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:screenOrientation="landscape"
|
|
||||||
android:configChanges="keyboardHidden|orientation">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
</application>
|
|
||||||
|
|
||||||
<supports-screens android:resizeable="true"
|
|
||||||
android:smallScreens="true"
|
|
||||||
android:normalScreens="true"
|
|
||||||
android:largeScreens="true"
|
|
||||||
android:anyDensity="true" />
|
|
||||||
|
|
||||||
<uses-sdk android:minSdkVersion="8" />
|
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.CAMERA"/>
|
|
||||||
|
|
||||||
<uses-feature android:name="android.hardware.camera" android:required="false"/>
|
|
||||||
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
|
|
||||||
<uses-feature android:name="android.hardware.camera.front" android:required="false"/>
|
|
||||||
<uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>
|
|
||||||
|
|
||||||
</manifest>
|
|
@ -1,6 +0,0 @@
|
|||||||
set(sample example-tutorial-1-camerapreview)
|
|
||||||
|
|
||||||
add_android_project(${sample} "${CMAKE_CURRENT_SOURCE_DIR}" LIBRARY_DEPS ${OpenCV_BINARY_DIR} SDK_TARGET 11 ${ANDROID_SDK_TARGET})
|
|
||||||
if(TARGET ${sample})
|
|
||||||
add_dependencies(opencv_android_examples ${sample})
|
|
||||||
endif()
|
|
Before Width: | Height: | Size: 2.0 KiB |
@ -1,4 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<string name="app_name">OCV T1 Preview</string>
|
|
||||||
</resources>
|
|
@ -1,131 +0,0 @@
|
|||||||
package org.opencv.samples.tutorial1;
|
|
||||||
|
|
||||||
import org.opencv.android.BaseLoaderCallback;
|
|
||||||
import org.opencv.android.CameraBridgeViewBase.CvCameraViewFrame;
|
|
||||||
import org.opencv.android.LoaderCallbackInterface;
|
|
||||||
import org.opencv.android.OpenCVLoader;
|
|
||||||
import org.opencv.core.Mat;
|
|
||||||
import org.opencv.android.CameraBridgeViewBase;
|
|
||||||
import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener2;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.util.Log;
|
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuItem;
|
|
||||||
import android.view.SurfaceView;
|
|
||||||
import android.view.WindowManager;
|
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
public class Tutorial1Activity extends Activity implements CvCameraViewListener2 {
|
|
||||||
private static final String TAG = "OCVSample::Activity";
|
|
||||||
|
|
||||||
private CameraBridgeViewBase mOpenCvCameraView;
|
|
||||||
private boolean mIsJavaCamera = true;
|
|
||||||
private MenuItem mItemSwitchCamera = null;
|
|
||||||
|
|
||||||
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
|
|
||||||
@Override
|
|
||||||
public void onManagerConnected(int status) {
|
|
||||||
switch (status) {
|
|
||||||
case LoaderCallbackInterface.SUCCESS:
|
|
||||||
{
|
|
||||||
Log.i(TAG, "OpenCV loaded successfully");
|
|
||||||
mOpenCvCameraView.enableView();
|
|
||||||
} break;
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
super.onManagerConnected(status);
|
|
||||||
} break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public Tutorial1Activity() {
|
|
||||||
Log.i(TAG, "Instantiated new " + this.getClass());
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Called when the activity is first created. */
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
Log.i(TAG, "called onCreate");
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
|
||||||
|
|
||||||
setContentView(R.layout.tutorial1_surface_view);
|
|
||||||
|
|
||||||
if (mIsJavaCamera)
|
|
||||||
mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.tutorial1_activity_java_surface_view);
|
|
||||||
else
|
|
||||||
mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.tutorial1_activity_native_surface_view);
|
|
||||||
|
|
||||||
mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
|
|
||||||
|
|
||||||
mOpenCvCameraView.setCvCameraViewListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPause()
|
|
||||||
{
|
|
||||||
super.onPause();
|
|
||||||
if (mOpenCvCameraView != null)
|
|
||||||
mOpenCvCameraView.disableView();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResume()
|
|
||||||
{
|
|
||||||
super.onResume();
|
|
||||||
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onDestroy() {
|
|
||||||
super.onDestroy();
|
|
||||||
if (mOpenCvCameraView != null)
|
|
||||||
mOpenCvCameraView.disableView();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
|
||||||
Log.i(TAG, "called onCreateOptionsMenu");
|
|
||||||
mItemSwitchCamera = menu.add("Toggle Native/Java camera");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
|
||||||
String toastMesage = new String();
|
|
||||||
Log.i(TAG, "called onOptionsItemSelected; selected item: " + item);
|
|
||||||
|
|
||||||
if (item == mItemSwitchCamera) {
|
|
||||||
mOpenCvCameraView.setVisibility(SurfaceView.GONE);
|
|
||||||
mIsJavaCamera = !mIsJavaCamera;
|
|
||||||
|
|
||||||
if (mIsJavaCamera) {
|
|
||||||
mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.tutorial1_activity_java_surface_view);
|
|
||||||
toastMesage = "Java Camera";
|
|
||||||
} else {
|
|
||||||
mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.tutorial1_activity_native_surface_view);
|
|
||||||
toastMesage = "Native Camera";
|
|
||||||
}
|
|
||||||
|
|
||||||
mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
|
|
||||||
mOpenCvCameraView.setCvCameraViewListener(this);
|
|
||||||
mOpenCvCameraView.enableView();
|
|
||||||
Toast toast = Toast.makeText(this, toastMesage, Toast.LENGTH_LONG);
|
|
||||||
toast.show();
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onCameraViewStarted(int width, int height) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onCameraViewStopped() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
|
|
||||||
return inputFrame.rgba();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<classpath>
|
|
||||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
|
||||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
|
||||||
<classpathentry kind="src" path="src"/>
|
|
||||||
<classpathentry kind="src" path="gen"/>
|
|
||||||
<classpathentry kind="output" path="bin/classes"/>
|
|
||||||
</classpath>
|
|
@ -1,74 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<?fileVersion 4.0.0?>
|
|
||||||
|
|
||||||
<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.settings">
|
|
||||||
<cconfiguration id="0.1227367918">
|
|
||||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.1227367918" moduleId="org.eclipse.cdt.core.settings" name="Default">
|
|
||||||
<externalSettings/>
|
|
||||||
<extensions>
|
|
||||||
<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
|
||||||
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
|
||||||
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
|
||||||
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
|
||||||
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
|
||||||
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
|
||||||
</extensions>
|
|
||||||
</storageModule>
|
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
|
||||||
<configuration artifactName="${ProjName}" buildProperties="" description="" id="0.1227367918" name="Default" parent="org.eclipse.cdt.build.core.prefbase.cfg">
|
|
||||||
<folderInfo id="0.1227367918." name="/" resourcePath="">
|
|
||||||
<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.1817556292" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
|
|
||||||
<targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.1817556292.437475188" name=""/>
|
|
||||||
<builder autoBuildTarget="" command="${NDKROOT}/ndk-build.cmd" enableAutoBuild="true" enableCleanBuild="false" id="org.eclipse.cdt.build.core.settings.default.builder.141883337" incrementalBuildTarget="" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
|
|
||||||
<tool id="org.eclipse.cdt.build.core.settings.holder.libs.914869649" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
|
|
||||||
<tool id="org.eclipse.cdt.build.core.settings.holder.1504728878" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
|
|
||||||
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1470189286" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
|
|
||||||
</tool>
|
|
||||||
<tool id="org.eclipse.cdt.build.core.settings.holder.260316541" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
|
|
||||||
<option id="org.eclipse.cdt.build.core.settings.holder.symbols.892620793" superClass="org.eclipse.cdt.build.core.settings.holder.symbols" valueType="definedSymbols">
|
|
||||||
<listOptionValue builtIn="false" value="ANDROID=1"/>
|
|
||||||
</option>
|
|
||||||
<option id="org.eclipse.cdt.build.core.settings.holder.incpaths.1772035264" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths" valueType="includePath">
|
|
||||||
<listOptionValue builtIn="false" value=""${NDKROOT}/platforms/android-9/arch-arm/usr/include""/>
|
|
||||||
<listOptionValue builtIn="false" value=""${NDKROOT}/sources/cxx-stl/gnu-libstdc++/4.6/include""/>
|
|
||||||
<listOptionValue builtIn="false" value=""${NDKROOT}/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/include""/>
|
|
||||||
<listOptionValue builtIn="false" value=""${ProjDirPath}/../../sdk/native/jni/include""/>
|
|
||||||
</option>
|
|
||||||
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.159439464" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
|
|
||||||
</tool>
|
|
||||||
<tool id="org.eclipse.cdt.build.core.settings.holder.1147885196" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
|
|
||||||
<option id="org.eclipse.cdt.build.core.settings.holder.symbols.1153621931" superClass="org.eclipse.cdt.build.core.settings.holder.symbols" valueType="definedSymbols">
|
|
||||||
<listOptionValue builtIn="false" value="ANDROID=1"/>
|
|
||||||
</option>
|
|
||||||
<option id="org.eclipse.cdt.build.core.settings.holder.incpaths.1841493632" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths" valueType="includePath">
|
|
||||||
<listOptionValue builtIn="false" value=""${NDKROOT}/platforms/android-9/arch-arm/usr/include""/>
|
|
||||||
<listOptionValue builtIn="false" value=""${NDKROOT}/sources/cxx-stl/gnu-libstdc++/4.6/include""/>
|
|
||||||
<listOptionValue builtIn="false" value=""${NDKROOT}/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/include""/>
|
|
||||||
<listOptionValue builtIn="false" value=""${ProjDirPath}/../../sdk/native/jni/include""/>
|
|
||||||
</option>
|
|
||||||
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.608739504" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
|
|
||||||
</tool>
|
|
||||||
</toolChain>
|
|
||||||
</folderInfo>
|
|
||||||
<sourceEntries>
|
|
||||||
<entry flags="VALUE_WORKSPACE_PATH" kind="sourcePath" name="jni"/>
|
|
||||||
</sourceEntries>
|
|
||||||
</configuration>
|
|
||||||
</storageModule>
|
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
|
||||||
</cconfiguration>
|
|
||||||
</storageModule>
|
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
|
||||||
<project id="OpenCV Tutorial 2 - Mixed Processing OpenCV.null.1819504790" name="OpenCV Tutorial 2 - Mixed Processing"/>
|
|
||||||
</storageModule>
|
|
||||||
<storageModule moduleId="scannerConfiguration">
|
|
||||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
|
||||||
<scannerConfigBuildInfo instanceId="0.1227367918">
|
|
||||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
|
||||||
</scannerConfigBuildInfo>
|
|
||||||
</storageModule>
|
|
||||||
<storageModule moduleId="refreshScope" versionNumber="1">
|
|
||||||
<resource resourceType="PROJECT" workspacePath="/OpenCV Tutorial 2 - Mixed Processing"/>
|
|
||||||
</storageModule>
|
|
||||||
</cproject>
|
|
@ -1,101 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<projectDescription>
|
|
||||||
<name>OpenCV Tutorial 2 - Mixed Processing</name>
|
|
||||||
<comment></comment>
|
|
||||||
<projects>
|
|
||||||
</projects>
|
|
||||||
<buildSpec>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
|
|
||||||
<triggers>auto,full,incremental,</triggers>
|
|
||||||
<arguments>
|
|
||||||
<dictionary>
|
|
||||||
<key>?name?</key>
|
|
||||||
<value></value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.append_environment</key>
|
|
||||||
<value>true</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.autoBuildTarget</key>
|
|
||||||
<value></value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.buildArguments</key>
|
|
||||||
<value></value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.buildCommand</key>
|
|
||||||
<value>${NDKROOT}/ndk-build.cmd</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
|
|
||||||
<value>clean</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.contents</key>
|
|
||||||
<value>org.eclipse.cdt.make.core.activeConfigSettings</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
|
|
||||||
<value>true</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
|
|
||||||
<value>false</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.enableFullBuild</key>
|
|
||||||
<value>true</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.fullBuildTarget</key>
|
|
||||||
<value></value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.stopOnError</key>
|
|
||||||
<value>true</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
|
|
||||||
<value>false</value>
|
|
||||||
</dictionary>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.ApkBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
|
|
||||||
<triggers>full,incremental,</triggers>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
</buildSpec>
|
|
||||||
<natures>
|
|
||||||
<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
|
|
||||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
|
||||||
<nature>org.eclipse.cdt.core.cnature</nature>
|
|
||||||
<nature>org.eclipse.cdt.core.ccnature</nature>
|
|
||||||
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
|
|
||||||
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
|
||||||
</natures>
|
|
||||||
</projectDescription>
|
|
@ -1,4 +0,0 @@
|
|||||||
eclipse.preferences.version=1
|
|
||||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
|
|
||||||
org.eclipse.jdt.core.compiler.compliance=1.6
|
|
||||||
org.eclipse.jdt.core.compiler.source=1.6
|
|
@ -1,38 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
package="org.opencv.samples.tutorial2"
|
|
||||||
android:versionCode="21"
|
|
||||||
android:versionName="2.1">
|
|
||||||
|
|
||||||
<application
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:icon="@drawable/icon"
|
|
||||||
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
|
|
||||||
|
|
||||||
<activity android:name="Tutorial2Activity"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:screenOrientation="landscape"
|
|
||||||
android:configChanges="keyboardHidden|orientation">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
</application>
|
|
||||||
|
|
||||||
<supports-screens android:resizeable="true"
|
|
||||||
android:smallScreens="true"
|
|
||||||
android:normalScreens="true"
|
|
||||||
android:largeScreens="true"
|
|
||||||
android:anyDensity="true" />
|
|
||||||
|
|
||||||
<uses-sdk android:minSdkVersion="8" />
|
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.CAMERA"/>
|
|
||||||
|
|
||||||
<uses-feature android:name="android.hardware.camera" android:required="false"/>
|
|
||||||
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
|
|
||||||
<uses-feature android:name="android.hardware.camera.front" android:required="false"/>
|
|
||||||
<uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>
|
|
||||||
|
|
||||||
</manifest>
|
|
@ -1,12 +0,0 @@
|
|||||||
set(sample example-tutorial-2-mixedprocessing)
|
|
||||||
|
|
||||||
if(BUILD_FAT_JAVA_LIB)
|
|
||||||
set(native_deps opencv_java)
|
|
||||||
else()
|
|
||||||
set(native_deps opencv_features2d)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
add_android_project(${sample} "${CMAKE_CURRENT_SOURCE_DIR}" LIBRARY_DEPS ${OpenCV_BINARY_DIR} SDK_TARGET 11 ${ANDROID_SDK_TARGET} NATIVE_DEPS ${native_deps})
|
|
||||||
if(TARGET ${sample})
|
|
||||||
add_dependencies(opencv_android_examples ${sample})
|
|
||||||
endif()
|
|
@ -1,11 +0,0 @@
|
|||||||
LOCAL_PATH := $(call my-dir)
|
|
||||||
|
|
||||||
include $(CLEAR_VARS)
|
|
||||||
|
|
||||||
include ../../sdk/native/jni/OpenCV.mk
|
|
||||||
|
|
||||||
LOCAL_MODULE := mixed_sample
|
|
||||||
LOCAL_SRC_FILES := jni_part.cpp
|
|
||||||
LOCAL_LDLIBS += -llog -ldl
|
|
||||||
|
|
||||||
include $(BUILD_SHARED_LIBRARY)
|
|
@ -1,4 +0,0 @@
|
|||||||
APP_STL := gnustl_static
|
|
||||||
APP_CPPFLAGS := -frtti -fexceptions
|
|
||||||
APP_ABI := armeabi-v7a
|
|
||||||
APP_PLATFORM := android-8
|
|
Before Width: | Height: | Size: 2.0 KiB |
@ -1,11 +0,0 @@
|
|||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent" >
|
|
||||||
|
|
||||||
<org.opencv.android.JavaCameraView
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="fill_parent"
|
|
||||||
android:id="@+id/tutorial2_activity_surface_view" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
@ -1,4 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<string name="app_name">OCV T2 Mixed Processing</string>
|
|
||||||
</resources>
|
|
@ -1,166 +0,0 @@
|
|||||||
package org.opencv.samples.tutorial2;
|
|
||||||
|
|
||||||
import org.opencv.android.BaseLoaderCallback;
|
|
||||||
import org.opencv.android.CameraBridgeViewBase.CvCameraViewFrame;
|
|
||||||
import org.opencv.android.LoaderCallbackInterface;
|
|
||||||
import org.opencv.android.OpenCVLoader;
|
|
||||||
import org.opencv.core.CvType;
|
|
||||||
import org.opencv.core.Mat;
|
|
||||||
import org.opencv.android.CameraBridgeViewBase;
|
|
||||||
import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener2;
|
|
||||||
import org.opencv.imgproc.Imgproc;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.util.Log;
|
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuItem;
|
|
||||||
import android.view.WindowManager;
|
|
||||||
|
|
||||||
public class Tutorial2Activity extends Activity implements CvCameraViewListener2 {
|
|
||||||
private static final String TAG = "OCVSample::Activity";
|
|
||||||
|
|
||||||
private static final int VIEW_MODE_RGBA = 0;
|
|
||||||
private static final int VIEW_MODE_GRAY = 1;
|
|
||||||
private static final int VIEW_MODE_CANNY = 2;
|
|
||||||
private static final int VIEW_MODE_FEATURES = 5;
|
|
||||||
|
|
||||||
private int mViewMode;
|
|
||||||
private Mat mRgba;
|
|
||||||
private Mat mIntermediateMat;
|
|
||||||
private Mat mGray;
|
|
||||||
|
|
||||||
private MenuItem mItemPreviewRGBA;
|
|
||||||
private MenuItem mItemPreviewGray;
|
|
||||||
private MenuItem mItemPreviewCanny;
|
|
||||||
private MenuItem mItemPreviewFeatures;
|
|
||||||
|
|
||||||
private CameraBridgeViewBase mOpenCvCameraView;
|
|
||||||
|
|
||||||
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
|
|
||||||
@Override
|
|
||||||
public void onManagerConnected(int status) {
|
|
||||||
switch (status) {
|
|
||||||
case LoaderCallbackInterface.SUCCESS:
|
|
||||||
{
|
|
||||||
Log.i(TAG, "OpenCV loaded successfully");
|
|
||||||
|
|
||||||
// Load native library after(!) OpenCV initialization
|
|
||||||
System.loadLibrary("mixed_sample");
|
|
||||||
|
|
||||||
mOpenCvCameraView.enableView();
|
|
||||||
} break;
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
super.onManagerConnected(status);
|
|
||||||
} break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public Tutorial2Activity() {
|
|
||||||
Log.i(TAG, "Instantiated new " + this.getClass());
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Called when the activity is first created. */
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
Log.i(TAG, "called onCreate");
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
|
||||||
|
|
||||||
setContentView(R.layout.tutorial2_surface_view);
|
|
||||||
|
|
||||||
mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.tutorial2_activity_surface_view);
|
|
||||||
mOpenCvCameraView.setCvCameraViewListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
|
||||||
Log.i(TAG, "called onCreateOptionsMenu");
|
|
||||||
mItemPreviewRGBA = menu.add("Preview RGBA");
|
|
||||||
mItemPreviewGray = menu.add("Preview GRAY");
|
|
||||||
mItemPreviewCanny = menu.add("Canny");
|
|
||||||
mItemPreviewFeatures = menu.add("Find features");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPause()
|
|
||||||
{
|
|
||||||
super.onPause();
|
|
||||||
if (mOpenCvCameraView != null)
|
|
||||||
mOpenCvCameraView.disableView();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResume()
|
|
||||||
{
|
|
||||||
super.onResume();
|
|
||||||
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onDestroy() {
|
|
||||||
super.onDestroy();
|
|
||||||
if (mOpenCvCameraView != null)
|
|
||||||
mOpenCvCameraView.disableView();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onCameraViewStarted(int width, int height) {
|
|
||||||
mRgba = new Mat(height, width, CvType.CV_8UC4);
|
|
||||||
mIntermediateMat = new Mat(height, width, CvType.CV_8UC4);
|
|
||||||
mGray = new Mat(height, width, CvType.CV_8UC1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onCameraViewStopped() {
|
|
||||||
mRgba.release();
|
|
||||||
mGray.release();
|
|
||||||
mIntermediateMat.release();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
|
|
||||||
final int viewMode = mViewMode;
|
|
||||||
switch (viewMode) {
|
|
||||||
case VIEW_MODE_GRAY:
|
|
||||||
// input frame has gray scale format
|
|
||||||
Imgproc.cvtColor(inputFrame.gray(), mRgba, Imgproc.COLOR_GRAY2RGBA, 4);
|
|
||||||
break;
|
|
||||||
case VIEW_MODE_RGBA:
|
|
||||||
// input frame has RBGA format
|
|
||||||
mRgba = inputFrame.rgba();
|
|
||||||
break;
|
|
||||||
case VIEW_MODE_CANNY:
|
|
||||||
// input frame has gray scale format
|
|
||||||
mRgba = inputFrame.rgba();
|
|
||||||
Imgproc.Canny(inputFrame.gray(), mIntermediateMat, 80, 100);
|
|
||||||
Imgproc.cvtColor(mIntermediateMat, mRgba, Imgproc.COLOR_GRAY2RGBA, 4);
|
|
||||||
break;
|
|
||||||
case VIEW_MODE_FEATURES:
|
|
||||||
// input frame has RGBA format
|
|
||||||
mRgba = inputFrame.rgba();
|
|
||||||
mGray = inputFrame.gray();
|
|
||||||
FindFeatures(mGray.getNativeObjAddr(), mRgba.getNativeObjAddr());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return mRgba;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
|
||||||
Log.i(TAG, "called onOptionsItemSelected; selected item: " + item);
|
|
||||||
|
|
||||||
if (item == mItemPreviewRGBA) {
|
|
||||||
mViewMode = VIEW_MODE_RGBA;
|
|
||||||
} else if (item == mItemPreviewGray) {
|
|
||||||
mViewMode = VIEW_MODE_GRAY;
|
|
||||||
} else if (item == mItemPreviewCanny) {
|
|
||||||
mViewMode = VIEW_MODE_CANNY;
|
|
||||||
} else if (item == mItemPreviewFeatures) {
|
|
||||||
mViewMode = VIEW_MODE_FEATURES;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public native void FindFeatures(long matAddrGr, long matAddrRgba);
|
|
||||||
}
|
|
@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<classpath>
|
|
||||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
|
||||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
|
||||||
<classpathentry kind="src" path="src"/>
|
|
||||||
<classpathentry kind="src" path="gen"/>
|
|
||||||
<classpathentry kind="output" path="bin/classes"/>
|
|
||||||
</classpath>
|
|
@ -1,33 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<projectDescription>
|
|
||||||
<name>OpenCV Tutorial 3 - Camera Control</name>
|
|
||||||
<comment></comment>
|
|
||||||
<projects>
|
|
||||||
</projects>
|
|
||||||
<buildSpec>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.ApkBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
</buildSpec>
|
|
||||||
<natures>
|
|
||||||
<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
|
|
||||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
|
||||||
</natures>
|
|
||||||
</projectDescription>
|
|
@ -1,4 +0,0 @@
|
|||||||
eclipse.preferences.version=1
|
|
||||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
|
|
||||||
org.eclipse.jdt.core.compiler.compliance=1.6
|
|
||||||
org.eclipse.jdt.core.compiler.source=1.6
|
|
@ -1,39 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
package="org.opencv.samples.tutorial3"
|
|
||||||
android:versionCode="21"
|
|
||||||
android:versionName="2.1">
|
|
||||||
|
|
||||||
<application
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:icon="@drawable/icon"
|
|
||||||
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
|
|
||||||
|
|
||||||
<activity android:name="Tutorial3Activity"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:screenOrientation="landscape"
|
|
||||||
android:configChanges="keyboardHidden|orientation">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
</application>
|
|
||||||
|
|
||||||
<supports-screens android:resizeable="true"
|
|
||||||
android:smallScreens="true"
|
|
||||||
android:normalScreens="true"
|
|
||||||
android:largeScreens="true"
|
|
||||||
android:anyDensity="true" />
|
|
||||||
|
|
||||||
<uses-sdk android:minSdkVersion="8" />
|
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.CAMERA"/>
|
|
||||||
|
|
||||||
<uses-feature android:name="android.hardware.camera" android:required="false"/>
|
|
||||||
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
|
|
||||||
<uses-feature android:name="android.hardware.camera.front" android:required="false"/>
|
|
||||||
<uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>
|
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
|
||||||
|
|
||||||
</manifest>
|
|
@ -1,6 +0,0 @@
|
|||||||
set(sample example-tutorial-3-cameracontrol)
|
|
||||||
|
|
||||||
add_android_project(${sample} "${CMAKE_CURRENT_SOURCE_DIR}" LIBRARY_DEPS ${OpenCV_BINARY_DIR} SDK_TARGET 11 ${ANDROID_SDK_TARGET})
|
|
||||||
if(TARGET ${sample})
|
|
||||||
add_dependencies(opencv_android_examples ${sample})
|
|
||||||
endif()
|
|
Before Width: | Height: | Size: 2.0 KiB |
@ -1,4 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<string name="app_name">OCV T3 Camera Control</string>
|
|
||||||
</resources>
|
|
@ -1,178 +0,0 @@
|
|||||||
package org.opencv.samples.tutorial3;
|
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.ListIterator;
|
|
||||||
|
|
||||||
import org.opencv.android.BaseLoaderCallback;
|
|
||||||
import org.opencv.android.CameraBridgeViewBase.CvCameraViewFrame;
|
|
||||||
import org.opencv.android.LoaderCallbackInterface;
|
|
||||||
import org.opencv.android.OpenCVLoader;
|
|
||||||
import org.opencv.core.Mat;
|
|
||||||
import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener2;
|
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.hardware.Camera.Size;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.os.Environment;
|
|
||||||
import android.util.Log;
|
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuItem;
|
|
||||||
import android.view.MotionEvent;
|
|
||||||
import android.view.SubMenu;
|
|
||||||
import android.view.SurfaceView;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.View.OnTouchListener;
|
|
||||||
import android.view.WindowManager;
|
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
public class Tutorial3Activity extends Activity implements CvCameraViewListener2, OnTouchListener {
|
|
||||||
private static final String TAG = "OCVSample::Activity";
|
|
||||||
|
|
||||||
private Tutorial3View mOpenCvCameraView;
|
|
||||||
private List<Size> mResolutionList;
|
|
||||||
private MenuItem[] mEffectMenuItems;
|
|
||||||
private SubMenu mColorEffectsMenu;
|
|
||||||
private MenuItem[] mResolutionMenuItems;
|
|
||||||
private SubMenu mResolutionMenu;
|
|
||||||
|
|
||||||
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
|
|
||||||
@Override
|
|
||||||
public void onManagerConnected(int status) {
|
|
||||||
switch (status) {
|
|
||||||
case LoaderCallbackInterface.SUCCESS:
|
|
||||||
{
|
|
||||||
Log.i(TAG, "OpenCV loaded successfully");
|
|
||||||
mOpenCvCameraView.enableView();
|
|
||||||
mOpenCvCameraView.setOnTouchListener(Tutorial3Activity.this);
|
|
||||||
} break;
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
super.onManagerConnected(status);
|
|
||||||
} break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public Tutorial3Activity() {
|
|
||||||
Log.i(TAG, "Instantiated new " + this.getClass());
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Called when the activity is first created. */
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
Log.i(TAG, "called onCreate");
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
|
||||||
|
|
||||||
setContentView(R.layout.tutorial3_surface_view);
|
|
||||||
|
|
||||||
mOpenCvCameraView = (Tutorial3View) findViewById(R.id.tutorial3_activity_java_surface_view);
|
|
||||||
|
|
||||||
mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
|
|
||||||
|
|
||||||
mOpenCvCameraView.setCvCameraViewListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPause()
|
|
||||||
{
|
|
||||||
super.onPause();
|
|
||||||
if (mOpenCvCameraView != null)
|
|
||||||
mOpenCvCameraView.disableView();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResume()
|
|
||||||
{
|
|
||||||
super.onResume();
|
|
||||||
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onDestroy() {
|
|
||||||
super.onDestroy();
|
|
||||||
if (mOpenCvCameraView != null)
|
|
||||||
mOpenCvCameraView.disableView();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onCameraViewStarted(int width, int height) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onCameraViewStopped() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
|
|
||||||
return inputFrame.rgba();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
|
||||||
List<String> effects = mOpenCvCameraView.getEffectList();
|
|
||||||
|
|
||||||
if (effects == null) {
|
|
||||||
Log.e(TAG, "Color effects are not supported by device!");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
mColorEffectsMenu = menu.addSubMenu("Color Effect");
|
|
||||||
mEffectMenuItems = new MenuItem[effects.size()];
|
|
||||||
|
|
||||||
int idx = 0;
|
|
||||||
ListIterator<String> effectItr = effects.listIterator();
|
|
||||||
while(effectItr.hasNext()) {
|
|
||||||
String element = effectItr.next();
|
|
||||||
mEffectMenuItems[idx] = mColorEffectsMenu.add(1, idx, Menu.NONE, element);
|
|
||||||
idx++;
|
|
||||||
}
|
|
||||||
|
|
||||||
mResolutionMenu = menu.addSubMenu("Resolution");
|
|
||||||
mResolutionList = mOpenCvCameraView.getResolutionList();
|
|
||||||
mResolutionMenuItems = new MenuItem[mResolutionList.size()];
|
|
||||||
|
|
||||||
ListIterator<Size> resolutionItr = mResolutionList.listIterator();
|
|
||||||
idx = 0;
|
|
||||||
while(resolutionItr.hasNext()) {
|
|
||||||
Size element = resolutionItr.next();
|
|
||||||
mResolutionMenuItems[idx] = mResolutionMenu.add(2, idx, Menu.NONE,
|
|
||||||
Integer.valueOf(element.width).toString() + "x" + Integer.valueOf(element.height).toString());
|
|
||||||
idx++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
|
||||||
Log.i(TAG, "called onOptionsItemSelected; selected item: " + item);
|
|
||||||
if (item.getGroupId() == 1)
|
|
||||||
{
|
|
||||||
mOpenCvCameraView.setEffect((String) item.getTitle());
|
|
||||||
Toast.makeText(this, mOpenCvCameraView.getEffect(), Toast.LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
else if (item.getGroupId() == 2)
|
|
||||||
{
|
|
||||||
int id = item.getItemId();
|
|
||||||
Size resolution = mResolutionList.get(id);
|
|
||||||
mOpenCvCameraView.setResolution(resolution);
|
|
||||||
resolution = mOpenCvCameraView.getResolution();
|
|
||||||
String caption = Integer.valueOf(resolution.width).toString() + "x" + Integer.valueOf(resolution.height).toString();
|
|
||||||
Toast.makeText(this, caption, Toast.LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressLint("SimpleDateFormat")
|
|
||||||
@Override
|
|
||||||
public boolean onTouch(View v, MotionEvent event) {
|
|
||||||
Log.i(TAG,"onTouch event");
|
|
||||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
|
|
||||||
String currentDateandTime = sdf.format(new Date());
|
|
||||||
String fileName = Environment.getExternalStorageDirectory().getPath() +
|
|
||||||
"/sample_picture_" + currentDateandTime + ".jpg";
|
|
||||||
mOpenCvCameraView.takePicture(fileName);
|
|
||||||
Toast.makeText(this, fileName + " saved", Toast.LENGTH_SHORT).show();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,60 +0,0 @@
|
|||||||
# ----------------------------------------------------------------------------
|
|
||||||
# CMake file for C samples. See root CMakeLists.txt
|
|
||||||
#
|
|
||||||
# ----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
SET(OPENCV_C_SAMPLES_REQUIRED_DEPS opencv_core opencv_flann opencv_imgproc
|
|
||||||
opencv_highgui opencv_ml opencv_video opencv_objdetect opencv_photo opencv_nonfree
|
|
||||||
opencv_features2d opencv_calib3d opencv_legacy opencv_contrib)
|
|
||||||
|
|
||||||
ocv_check_dependencies(${OPENCV_C_SAMPLES_REQUIRED_DEPS})
|
|
||||||
|
|
||||||
if(BUILD_EXAMPLES AND OCV_DEPENDENCIES_FOUND)
|
|
||||||
project(c_samples)
|
|
||||||
|
|
||||||
if(CMAKE_COMPILER_IS_GNUCXX AND NOT ENABLE_NOISY_WARNINGS)
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-function")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
ocv_include_modules(${OPENCV_C_SAMPLES_REQUIRED_DEPS})
|
|
||||||
|
|
||||||
# ---------------------------------------------
|
|
||||||
# Define executable targets
|
|
||||||
# ---------------------------------------------
|
|
||||||
MACRO(OPENCV_DEFINE_C_EXAMPLE name srcs)
|
|
||||||
set(the_target "example_${name}")
|
|
||||||
add_executable(${the_target} ${srcs})
|
|
||||||
target_link_libraries(${the_target} ${OPENCV_LINKER_LIBS} ${OPENCV_C_SAMPLES_REQUIRED_DEPS})
|
|
||||||
|
|
||||||
set_target_properties(${the_target} PROPERTIES
|
|
||||||
OUTPUT_NAME "c-example-${name}"
|
|
||||||
PROJECT_LABEL "(EXAMPLE) ${name}")
|
|
||||||
|
|
||||||
if(ENABLE_SOLUTION_FOLDERS)
|
|
||||||
set_target_properties(${the_target} PROPERTIES FOLDER "samples//c")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(WIN32)
|
|
||||||
if(MSVC AND NOT BUILD_SHARED_LIBS)
|
|
||||||
set_target_properties(${the_target} PROPERTIES LINK_FLAGS "/NODEFAULTLIB:atlthunk.lib /NODEFAULTLIB:atlsd.lib /DEBUG")
|
|
||||||
endif()
|
|
||||||
install(TARGETS ${the_target}
|
|
||||||
RUNTIME DESTINATION "samples/c" COMPONENT main)
|
|
||||||
endif()
|
|
||||||
ENDMACRO()
|
|
||||||
|
|
||||||
file(GLOB cpp_samples RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp *.c)
|
|
||||||
|
|
||||||
foreach(sample_filename ${cpp_samples})
|
|
||||||
get_filename_component(sample ${sample_filename} NAME_WE)
|
|
||||||
OPENCV_DEFINE_C_EXAMPLE(${sample} ${sample_filename})
|
|
||||||
endforeach()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (INSTALL_C_EXAMPLES AND NOT WIN32)
|
|
||||||
file(GLOB C_SAMPLES *.c *.cpp *.jpg *.png *.data makefile.* build_all.sh *.dsp *.cmd )
|
|
||||||
install(FILES ${C_SAMPLES}
|
|
||||||
DESTINATION share/OpenCV/samples/c
|
|
||||||
PERMISSIONS OWNER_READ GROUP_READ WORLD_READ)
|
|
||||||
endif ()
|
|
||||||
|
|
Before Width: | Height: | Size: 372 B |
Before Width: | Height: | Size: 83 KiB |
Before Width: | Height: | Size: 176 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 120 KiB |
@ -1,16 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
if [ $# -gt 0 ] ; then
|
|
||||||
base=`basename $1 .c`
|
|
||||||
echo "compiling $base"
|
|
||||||
gcc -ggdb `pkg-config opencv --cflags --libs` $base.c -o $base
|
|
||||||
else
|
|
||||||
for i in *.c; do
|
|
||||||
echo "compiling $i"
|
|
||||||
gcc -ggdb `pkg-config --cflags opencv` -o `basename $i .c` $i `pkg-config --libs opencv`;
|
|
||||||
done
|
|
||||||
for i in *.cpp; do
|
|
||||||
echo "compiling $i"
|
|
||||||
g++ -ggdb `pkg-config --cflags opencv` -o `basename $i .cpp` $i `pkg-config --libs opencv`;
|
|
||||||
done
|
|
||||||
fi
|
|
@ -1,10 +0,0 @@
|
|||||||
<?xml version="1.0"?>
|
|
||||||
<opencv_storage>
|
|
||||||
<numTrees>20</numTrees>
|
|
||||||
<depth>7</depth>
|
|
||||||
<views>1000</views>
|
|
||||||
<patchSize>20</patchSize>
|
|
||||||
<reducedNumDim>30</reducedNumDim>
|
|
||||||
<numQuantBits>4</numQuantBits>
|
|
||||||
<printStatus>1</printStatus>
|
|
||||||
</opencv_storage>
|
|
Before Width: | Height: | Size: 64 KiB |
@ -1,167 +0,0 @@
|
|||||||
#include "opencv2/imgproc/imgproc_c.h"
|
|
||||||
#include "opencv2/highgui/highgui_c.h"
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
static void help(void)
|
|
||||||
{
|
|
||||||
printf("\nThis program creates an image to demonstrate the use of the \"c\" contour\n"
|
|
||||||
"functions: cvFindContours() and cvApproxPoly() along with the storage\n"
|
|
||||||
"functions cvCreateMemStorage() and cvDrawContours().\n"
|
|
||||||
"It also shows the use of a trackbar to control contour retrieval.\n"
|
|
||||||
"\n"
|
|
||||||
"Usage :\n"
|
|
||||||
"./contours\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
#define w 500
|
|
||||||
int levels = 3;
|
|
||||||
CvSeq* contours = 0;
|
|
||||||
|
|
||||||
static void on_trackbar(int pos)
|
|
||||||
{
|
|
||||||
IplImage* cnt_img = cvCreateImage( cvSize(w,w), 8, 3 );
|
|
||||||
CvSeq* _contours = contours;
|
|
||||||
int _levels = levels - 3;
|
|
||||||
(void)pos;
|
|
||||||
|
|
||||||
if( _levels <= 0 ) // get to the nearest face to make it look more funny
|
|
||||||
_contours = _contours->h_next->h_next->h_next;
|
|
||||||
cvZero( cnt_img );
|
|
||||||
cvDrawContours( cnt_img, _contours, CV_RGB(255,0,0), CV_RGB(0,255,0), _levels, 3, CV_AA, cvPoint(0,0) );
|
|
||||||
cvShowImage( "contours", cnt_img );
|
|
||||||
cvReleaseImage( &cnt_img );
|
|
||||||
}
|
|
||||||
|
|
||||||
static void findCComp( IplImage* img )
|
|
||||||
{
|
|
||||||
int x, y, cidx = 1;
|
|
||||||
IplImage* mask = cvCreateImage( cvSize(img->width+2, img->height+2), 8, 1 );
|
|
||||||
cvZero(mask);
|
|
||||||
cvRectangle( mask, cvPoint(0, 0), cvPoint(mask->width-1, mask->height-1),
|
|
||||||
cvScalarAll(1), 1, 8, 0 );
|
|
||||||
|
|
||||||
for( y = 0; y < img->height; y++ )
|
|
||||||
for( x = 0; x < img->width; x++ )
|
|
||||||
{
|
|
||||||
if( CV_IMAGE_ELEM(mask, uchar, y+1, x+1) != 0 )
|
|
||||||
continue;
|
|
||||||
cvFloodFill(img, cvPoint(x,y), cvScalarAll(cidx),
|
|
||||||
cvScalarAll(0), cvScalarAll(0), 0, 4, mask);
|
|
||||||
cidx++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
|
||||||
{
|
|
||||||
int i, j;
|
|
||||||
CvMemStorage* storage = cvCreateMemStorage(0);
|
|
||||||
IplImage* img = cvCreateImage( cvSize(w,w), 8, 1 );
|
|
||||||
IplImage* img32f = cvCreateImage( cvSize(w,w), IPL_DEPTH_32F, 1 );
|
|
||||||
IplImage* img32s = cvCreateImage( cvSize(w,w), IPL_DEPTH_32S, 1 );
|
|
||||||
IplImage* img3 = cvCreateImage( cvSize(w,w), 8, 3 );
|
|
||||||
(void)argc; (void)argv;
|
|
||||||
|
|
||||||
help();
|
|
||||||
cvZero( img );
|
|
||||||
|
|
||||||
for( i=0; i < 6; i++ )
|
|
||||||
{
|
|
||||||
int dx = (i%2)*250 - 30;
|
|
||||||
int dy = (i/2)*150;
|
|
||||||
CvScalar white = cvRealScalar(255);
|
|
||||||
CvScalar black = cvRealScalar(0);
|
|
||||||
|
|
||||||
if( i == 0 )
|
|
||||||
{
|
|
||||||
for( j = 0; j <= 10; j++ )
|
|
||||||
{
|
|
||||||
double angle = (j+5)*CV_PI/21;
|
|
||||||
cvLine(img, cvPoint(cvRound(dx+100+j*10-80*cos(angle)),
|
|
||||||
cvRound(dy+100-90*sin(angle))),
|
|
||||||
cvPoint(cvRound(dx+100+j*10-30*cos(angle)),
|
|
||||||
cvRound(dy+100-30*sin(angle))), white, 3, 8, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
cvEllipse( img, cvPoint(dx+150, dy+100), cvSize(100,70), 0, 0, 360, white, -1, 8, 0 );
|
|
||||||
cvEllipse( img, cvPoint(dx+115, dy+70), cvSize(30,20), 0, 0, 360, black, -1, 8, 0 );
|
|
||||||
cvEllipse( img, cvPoint(dx+185, dy+70), cvSize(30,20), 0, 0, 360, black, -1, 8, 0 );
|
|
||||||
cvEllipse( img, cvPoint(dx+115, dy+70), cvSize(15,15), 0, 0, 360, white, -1, 8, 0 );
|
|
||||||
cvEllipse( img, cvPoint(dx+185, dy+70), cvSize(15,15), 0, 0, 360, white, -1, 8, 0 );
|
|
||||||
cvEllipse( img, cvPoint(dx+115, dy+70), cvSize(5,5), 0, 0, 360, black, -1, 8, 0 );
|
|
||||||
cvEllipse( img, cvPoint(dx+185, dy+70), cvSize(5,5), 0, 0, 360, black, -1, 8, 0 );
|
|
||||||
cvEllipse( img, cvPoint(dx+150, dy+100), cvSize(10,5), 0, 0, 360, black, -1, 8, 0 );
|
|
||||||
cvEllipse( img, cvPoint(dx+150, dy+150), cvSize(40,10), 0, 0, 360, black, -1, 8, 0 );
|
|
||||||
cvEllipse( img, cvPoint(dx+27, dy+100), cvSize(20,35), 0, 0, 360, white, -1, 8, 0 );
|
|
||||||
cvEllipse( img, cvPoint(dx+273, dy+100), cvSize(20,35), 0, 0, 360, white, -1, 8, 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
cvNamedWindow( "image", 1 );
|
|
||||||
cvShowImage( "image", img );
|
|
||||||
cvConvert( img, img32f );
|
|
||||||
findCComp( img32f );
|
|
||||||
cvConvert( img32f, img32s );
|
|
||||||
|
|
||||||
cvFindContours( img32s, storage, &contours, sizeof(CvContour),
|
|
||||||
CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0) );
|
|
||||||
|
|
||||||
//cvFindContours( img, storage, &contours, sizeof(CvContour),
|
|
||||||
// CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0) );
|
|
||||||
|
|
||||||
|
|
||||||
{
|
|
||||||
const char* attrs[] = {"recursive", "1", 0};
|
|
||||||
cvSave("contours.xml", contours, 0, 0, cvAttrList(attrs, 0));
|
|
||||||
contours = (CvSeq*)cvLoad("contours.xml", storage, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// comment this out if you do not want approximation
|
|
||||||
contours = cvApproxPoly( contours, sizeof(CvContour), storage, CV_POLY_APPROX_DP, 3, 1 );
|
|
||||||
|
|
||||||
cvNamedWindow( "contours", 1 );
|
|
||||||
cvCreateTrackbar( "levels+3", "contours", &levels, 7, on_trackbar );
|
|
||||||
|
|
||||||
{
|
|
||||||
CvRNG rng = cvRNG(-1);
|
|
||||||
|
|
||||||
CvSeq* tcontours = contours;
|
|
||||||
cvCvtColor( img, img3, CV_GRAY2BGR );
|
|
||||||
while( tcontours->h_next )
|
|
||||||
tcontours = tcontours->h_next;
|
|
||||||
|
|
||||||
for( ; tcontours != 0; tcontours = tcontours->h_prev )
|
|
||||||
{
|
|
||||||
CvScalar color;
|
|
||||||
color.val[0] = cvRandInt(&rng) % 256;
|
|
||||||
color.val[1] = cvRandInt(&rng) % 256;
|
|
||||||
color.val[2] = cvRandInt(&rng) % 256;
|
|
||||||
color.val[3] = cvRandInt(&rng) % 256;
|
|
||||||
cvDrawContours(img3, tcontours, color, color, 0, -1, 8, cvPoint(0,0));
|
|
||||||
if( tcontours->v_next )
|
|
||||||
{
|
|
||||||
color.val[0] = cvRandInt(&rng) % 256;
|
|
||||||
color.val[1] = cvRandInt(&rng) % 256;
|
|
||||||
color.val[2] = cvRandInt(&rng) % 256;
|
|
||||||
color.val[3] = cvRandInt(&rng) % 256;
|
|
||||||
cvDrawContours(img3, tcontours->v_next, color, color, 1, -1, 8, cvPoint(0,0));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
cvShowImage( "colored", img3 );
|
|
||||||
on_trackbar(0);
|
|
||||||
cvWaitKey(0);
|
|
||||||
cvReleaseMemStorage( &storage );
|
|
||||||
cvReleaseImage( &img );
|
|
||||||
cvReleaseImage( &img32f );
|
|
||||||
cvReleaseImage( &img32s );
|
|
||||||
cvReleaseImage( &img3 );
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef _EiC
|
|
||||||
main(1,"");
|
|
||||||
#endif
|
|
@ -1,92 +0,0 @@
|
|||||||
# Microsoft Developer Studio Project File - Name="cvsample" - Package Owner=<4>
|
|
||||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
|
||||||
# ** DO NOT EDIT **
|
|
||||||
|
|
||||||
# TARGTYPE "Win32 (x86) Console Application" 0x0103
|
|
||||||
|
|
||||||
CFG=cvsample - Win32 Release
|
|
||||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
|
||||||
!MESSAGE use the Export Makefile command and run
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE NMAKE /f "cvsample.mak".
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE You can specify a configuration when running NMAKE
|
|
||||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE NMAKE /f "cvsample.mak" CFG="cvsample - Win32 Release"
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE Possible choices for configuration are:
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE "cvsample - Win32 Release" (based on "Win32 (x86) Console Application")
|
|
||||||
!MESSAGE "cvsample - Win32 Debug" (based on "Win32 (x86) Console Application")
|
|
||||||
!MESSAGE
|
|
||||||
|
|
||||||
# Begin Project
|
|
||||||
# PROP AllowPerConfigDependencies 0
|
|
||||||
# PROP Scc_ProjName ""
|
|
||||||
# PROP Scc_LocalPath ""
|
|
||||||
CPP=cl.exe
|
|
||||||
RSC=rc.exe
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "cvsample - Win32 Release"
|
|
||||||
|
|
||||||
# PROP BASE Use_MFC 0
|
|
||||||
# PROP BASE Use_Debug_Libraries 0
|
|
||||||
# PROP BASE Output_Dir "Release"
|
|
||||||
# PROP BASE Intermediate_Dir "Release"
|
|
||||||
# PROP BASE Target_Dir ""
|
|
||||||
# PROP Use_MFC 0
|
|
||||||
# PROP Use_Debug_Libraries 0
|
|
||||||
# PROP Output_Dir "..\..\_temp\cvsample_Release"
|
|
||||||
# PROP Intermediate_Dir "..\..\_temp\cvsample_Release"
|
|
||||||
# PROP Ignore_Export_Lib 0
|
|
||||||
# PROP Target_Dir ""
|
|
||||||
F90=df.exe
|
|
||||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
|
||||||
# ADD CPP /nologo /MD /W4 /Gm /GX /Zi /O2 /I "../../cxcore/include" /I "../../cv/include" /I "../../otherlibs/highgui" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
|
||||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
|
||||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
# ADD BASE BSC32 /nologo
|
|
||||||
# ADD BSC32 /nologo
|
|
||||||
LINK32=link.exe
|
|
||||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
|
||||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib cxcore.lib cv.lib highgui.lib /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"libmmd.lib" /out:".\cvsample.exe" /libpath:"../../lib"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "cvsample - Win32 Debug"
|
|
||||||
|
|
||||||
# PROP BASE Use_MFC 0
|
|
||||||
# PROP BASE Use_Debug_Libraries 1
|
|
||||||
# PROP BASE Output_Dir "Debug"
|
|
||||||
# PROP BASE Intermediate_Dir "Debug"
|
|
||||||
# PROP BASE Target_Dir ""
|
|
||||||
# PROP Use_MFC 0
|
|
||||||
# PROP Use_Debug_Libraries 1
|
|
||||||
# PROP Output_Dir "..\..\_temp\cvsample_Debug"
|
|
||||||
# PROP Intermediate_Dir "..\..\_temp\cvsample_Debug"
|
|
||||||
# PROP Ignore_Export_Lib 0
|
|
||||||
# PROP Target_Dir ""
|
|
||||||
F90=df.exe
|
|
||||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
|
||||||
# ADD CPP /nologo /MDd /W4 /Gm /GX /Zi /Od /I "../../cxcore/include" /I "../../cv/include" /I "../../otherlibs/highgui" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
|
||||||
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
|
||||||
# ADD RSC /l 0x409 /d "_DEBUG"
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
# ADD BASE BSC32 /nologo
|
|
||||||
# ADD BSC32 /nologo
|
|
||||||
LINK32=link.exe
|
|
||||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
|
||||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib cxcored.lib cvd.lib highguid.lib /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"libmmdd.lib" /out:".\cvsampled.exe" /pdbtype:sept /libpath:"../../lib"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# Begin Target
|
|
||||||
|
|
||||||
# Name "cvsample - Win32 Release"
|
|
||||||
# Name "cvsample - Win32 Debug"
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\squares.c
|
|
||||||
# End Source File
|
|
||||||
# End Target
|
|
||||||
# End Project
|
|
@ -1,413 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="windows-1251"?>
|
|
||||||
<VisualStudioProject
|
|
||||||
ProjectType="Visual C++"
|
|
||||||
Version="8,00"
|
|
||||||
Name="cvsample"
|
|
||||||
ProjectGUID="{2820F96A-13D2-4EFE-BC9F-A9AF482026AE}"
|
|
||||||
RootNamespace="cvsample"
|
|
||||||
>
|
|
||||||
<Platforms>
|
|
||||||
<Platform
|
|
||||||
Name="Win32"
|
|
||||||
/>
|
|
||||||
<Platform
|
|
||||||
Name="x64"
|
|
||||||
/>
|
|
||||||
</Platforms>
|
|
||||||
<ToolFiles>
|
|
||||||
</ToolFiles>
|
|
||||||
<Configurations>
|
|
||||||
<Configuration
|
|
||||||
Name="Debug|Win32"
|
|
||||||
OutputDirectory="$(TEMP)\opencv.build\$(ProjectName)_$(ConfigurationName).$(PlatformName)"
|
|
||||||
IntermediateDirectory="$(OutDir)"
|
|
||||||
ConfigurationType="1"
|
|
||||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
|
|
||||||
UseOfMFC="0"
|
|
||||||
ATLMinimizesCRunTimeLibraryUsage="false"
|
|
||||||
CharacterSet="2"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
TypeLibraryName=".\..\..\_temp\cvsample_Dbg/cvsample.tlb"
|
|
||||||
HeaderFileName=""
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="0"
|
|
||||||
AdditionalIncludeDirectories="../../cxcore/include,../../cv/include,../../otherlibs/highgui"
|
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
|
||||||
MinimalRebuild="true"
|
|
||||||
BasicRuntimeChecks="3"
|
|
||||||
RuntimeLibrary="3"
|
|
||||||
PrecompiledHeaderFile=".\..\..\_temp\cvsample_Dbg/cvsample.pch"
|
|
||||||
AssemblerListingLocation="$(IntDir)\"
|
|
||||||
ObjectFile="$(IntDir)\"
|
|
||||||
ProgramDataBaseFileName="$(IntDir)\"
|
|
||||||
WarningLevel="4"
|
|
||||||
SuppressStartupBanner="true"
|
|
||||||
DebugInformationFormat="3"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
PreprocessorDefinitions="_DEBUG"
|
|
||||||
Culture="1033"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
AdditionalDependencies="odbc32.lib odbccp32.lib cxcored.lib cvd.lib highguid.lib"
|
|
||||||
OutputFile=".\cvsampled.exe"
|
|
||||||
LinkIncremental="2"
|
|
||||||
SuppressStartupBanner="true"
|
|
||||||
AdditionalLibraryDirectories="../../lib"
|
|
||||||
IgnoreDefaultLibraryNames="libmmdd.lib"
|
|
||||||
GenerateDebugInformation="true"
|
|
||||||
ProgramDatabaseFile="$(IntDir)/$(ProjectName)d.pdb"
|
|
||||||
SubSystem="1"
|
|
||||||
TargetMachine="1"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCALinkTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManifestTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXDCMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCBscMakeTool"
|
|
||||||
SuppressStartupBanner="true"
|
|
||||||
OutputFile="$(IntDir)\$(ProjectName).bsc"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCFxCopTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAppVerifierTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebDeploymentTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
|
||||||
Name="Debug|x64"
|
|
||||||
OutputDirectory="$(TEMP)\opencv.build\$(ProjectName)_$(ConfigurationName).$(PlatformName)"
|
|
||||||
IntermediateDirectory="$(OutDir)"
|
|
||||||
ConfigurationType="1"
|
|
||||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
|
|
||||||
UseOfMFC="0"
|
|
||||||
ATLMinimizesCRunTimeLibraryUsage="false"
|
|
||||||
CharacterSet="2"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
TargetEnvironment="3"
|
|
||||||
TypeLibraryName=".\..\..\_temp\cvsample_Dbg64/cvsample.tlb"
|
|
||||||
HeaderFileName=""
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="0"
|
|
||||||
AdditionalIncludeDirectories="../../cxcore/include,../../cv/include,../../otherlibs/highgui"
|
|
||||||
PreprocessorDefinitions="WIN32;WIN64;EM64T;_DEBUG;_CONSOLE"
|
|
||||||
MinimalRebuild="true"
|
|
||||||
BasicRuntimeChecks="3"
|
|
||||||
RuntimeLibrary="3"
|
|
||||||
PrecompiledHeaderFile=".\..\..\_temp\cvsample_Dbg64/cvsample.pch"
|
|
||||||
AssemblerListingLocation="$(IntDir)\"
|
|
||||||
ObjectFile="$(IntDir)\"
|
|
||||||
ProgramDataBaseFileName="$(IntDir)\"
|
|
||||||
WarningLevel="4"
|
|
||||||
SuppressStartupBanner="true"
|
|
||||||
DebugInformationFormat="3"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
PreprocessorDefinitions="_DEBUG"
|
|
||||||
Culture="1033"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
AdditionalDependencies="odbc32.lib odbccp32.lib cxcored_64.lib cvd_64.lib highguid_64.lib"
|
|
||||||
OutputFile=".\cvsampled_64.exe"
|
|
||||||
LinkIncremental="2"
|
|
||||||
SuppressStartupBanner="true"
|
|
||||||
AdditionalLibraryDirectories="../../lib"
|
|
||||||
IgnoreDefaultLibraryNames="libmmdd.lib"
|
|
||||||
GenerateDebugInformation="true"
|
|
||||||
ProgramDatabaseFile="$(IntDir)/$(ProjectName)d_64.pdb"
|
|
||||||
SubSystem="1"
|
|
||||||
TargetMachine="17"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCALinkTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManifestTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXDCMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCBscMakeTool"
|
|
||||||
SuppressStartupBanner="true"
|
|
||||||
OutputFile="$(IntDir)\$(ProjectName).bsc"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCFxCopTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAppVerifierTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebDeploymentTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
|
||||||
Name="Release|Win32"
|
|
||||||
OutputDirectory="$(TEMP)\opencv.build\$(ProjectName)_$(ConfigurationName).$(PlatformName)"
|
|
||||||
IntermediateDirectory="$(OutDir)"
|
|
||||||
ConfigurationType="1"
|
|
||||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
|
|
||||||
UseOfMFC="0"
|
|
||||||
ATLMinimizesCRunTimeLibraryUsage="false"
|
|
||||||
CharacterSet="2"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
TypeLibraryName=".\..\..\_temp\cvsample_Rls/cvsample.tlb"
|
|
||||||
HeaderFileName=""
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="2"
|
|
||||||
InlineFunctionExpansion="1"
|
|
||||||
AdditionalIncludeDirectories="../../cxcore/include,../../cv/include,../../otherlibs/highgui"
|
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
|
||||||
StringPooling="true"
|
|
||||||
MinimalRebuild="true"
|
|
||||||
RuntimeLibrary="2"
|
|
||||||
EnableFunctionLevelLinking="true"
|
|
||||||
PrecompiledHeaderFile=".\..\..\_temp\cvsample_Rls/cvsample.pch"
|
|
||||||
AssemblerListingLocation="$(IntDir)\"
|
|
||||||
ObjectFile="$(IntDir)\"
|
|
||||||
ProgramDataBaseFileName="$(IntDir)\"
|
|
||||||
WarningLevel="4"
|
|
||||||
SuppressStartupBanner="true"
|
|
||||||
DebugInformationFormat="3"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
PreprocessorDefinitions="NDEBUG"
|
|
||||||
Culture="1033"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
AdditionalDependencies="odbc32.lib odbccp32.lib cxcore.lib cv.lib highgui.lib"
|
|
||||||
OutputFile=".\cvsample.exe"
|
|
||||||
LinkIncremental="1"
|
|
||||||
SuppressStartupBanner="true"
|
|
||||||
AdditionalLibraryDirectories="../../lib"
|
|
||||||
IgnoreDefaultLibraryNames="libmmd.lib"
|
|
||||||
GenerateDebugInformation="true"
|
|
||||||
ProgramDatabaseFile="$(IntDir)/$(ProjectName).pdb"
|
|
||||||
SubSystem="1"
|
|
||||||
TargetMachine="1"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCALinkTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManifestTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXDCMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCBscMakeTool"
|
|
||||||
SuppressStartupBanner="true"
|
|
||||||
OutputFile="$(IntDir)\$(ProjectName).bsc"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCFxCopTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAppVerifierTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebDeploymentTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
|
||||||
Name="Release|x64"
|
|
||||||
OutputDirectory="$(TEMP)\opencv.build\$(ProjectName)_$(ConfigurationName).$(PlatformName)"
|
|
||||||
IntermediateDirectory="$(OutDir)"
|
|
||||||
ConfigurationType="1"
|
|
||||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
|
|
||||||
UseOfMFC="0"
|
|
||||||
ATLMinimizesCRunTimeLibraryUsage="false"
|
|
||||||
CharacterSet="2"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
TargetEnvironment="3"
|
|
||||||
TypeLibraryName=".\..\..\_temp\cvsample_Rls64/cvsample.tlb"
|
|
||||||
HeaderFileName=""
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="2"
|
|
||||||
InlineFunctionExpansion="1"
|
|
||||||
AdditionalIncludeDirectories="../../cxcore/include,../../cv/include,../../otherlibs/highgui"
|
|
||||||
PreprocessorDefinitions="WIN32;WIN64;EM64T;NDEBUG;_CONSOLE"
|
|
||||||
StringPooling="true"
|
|
||||||
MinimalRebuild="true"
|
|
||||||
RuntimeLibrary="2"
|
|
||||||
EnableFunctionLevelLinking="true"
|
|
||||||
PrecompiledHeaderFile=".\..\..\_temp\cvsample_Rls64/cvsample.pch"
|
|
||||||
AssemblerListingLocation="$(IntDir)\"
|
|
||||||
ObjectFile="$(IntDir)\"
|
|
||||||
ProgramDataBaseFileName="$(IntDir)\"
|
|
||||||
WarningLevel="4"
|
|
||||||
SuppressStartupBanner="true"
|
|
||||||
DebugInformationFormat="3"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
PreprocessorDefinitions="NDEBUG"
|
|
||||||
Culture="1033"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
AdditionalDependencies="odbc32.lib odbccp32.lib cxcore_64.lib cv_64.lib highgui_64.lib"
|
|
||||||
OutputFile=".\cvsample_64.exe"
|
|
||||||
LinkIncremental="1"
|
|
||||||
SuppressStartupBanner="true"
|
|
||||||
AdditionalLibraryDirectories="../../lib"
|
|
||||||
IgnoreDefaultLibraryNames="libmmd.lib"
|
|
||||||
GenerateDebugInformation="true"
|
|
||||||
ProgramDatabaseFile="$(IntDir)/$(ProjectName)_64.pdb"
|
|
||||||
SubSystem="1"
|
|
||||||
TargetMachine="17"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCALinkTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManifestTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXDCMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCBscMakeTool"
|
|
||||||
SuppressStartupBanner="true"
|
|
||||||
OutputFile="$(IntDir)\$(ProjectName).bsc"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCFxCopTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAppVerifierTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebDeploymentTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
</Configuration>
|
|
||||||
</Configurations>
|
|
||||||
<References>
|
|
||||||
</References>
|
|
||||||
<Files>
|
|
||||||
<File
|
|
||||||
RelativePath=".\stereo_calib.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
</Files>
|
|
||||||
<Globals>
|
|
||||||
</Globals>
|
|
||||||
</VisualStudioProject>
|
|
@ -1,18 +0,0 @@
|
|||||||
PROJECT(opencv_example)
|
|
||||||
|
|
||||||
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
|
|
||||||
if(COMMAND cmake_policy)
|
|
||||||
cmake_policy(SET CMP0003 NEW)
|
|
||||||
endif(COMMAND cmake_policy)
|
|
||||||
|
|
||||||
FIND_PACKAGE( OpenCV REQUIRED )
|
|
||||||
|
|
||||||
# Declare the target (an executable)
|
|
||||||
ADD_EXECUTABLE(opencv_example minarea.c)
|
|
||||||
|
|
||||||
TARGET_LINK_LIBRARIES(opencv_example ${OpenCV_LIBS})
|
|
||||||
|
|
||||||
#MESSAGE(STATUS "OpenCV_LIBS: ${OpenCV_LIBS}")
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
|||||||
Example for CMake build system.
|
|
||||||
|
|
||||||
Compile OpenCV with cmake, preferently in an off-tree build, for example:
|
|
||||||
|
|
||||||
$ mkdir opencv-release
|
|
||||||
$ cd opencv-release
|
|
||||||
$ cmake <OPENCV_SRC_PATH>
|
|
||||||
$ make
|
|
||||||
|
|
||||||
And, *only optionally*, install it with.
|
|
||||||
$ sudo make install
|
|
||||||
|
|
||||||
Then create the binary directory for the example with:
|
|
||||||
$ mkdir example-release
|
|
||||||
$ cd example-release
|
|
||||||
|
|
||||||
Then, if "make install" have been executed, directly running
|
|
||||||
$ cmake <OPENCV_SRC_PATH>/samples/c/example_cmake/
|
|
||||||
|
|
||||||
will detect the "OpenCVConfig.cmake" file and the project is ready to compile.
|
|
||||||
|
|
||||||
If "make install" has not been executed, you'll have to manually pick the opencv
|
|
||||||
binary directory (Under Windows CMake may remember the correct directory). Open
|
|
||||||
the CMake gui with:
|
|
||||||
$ cmake-gui <OPENCV_SRC_PATH>/samples/c/example_cmake/
|
|
||||||
|
|
||||||
And pick the correct value for OpenCV_DIR.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,117 +0,0 @@
|
|||||||
#ifdef _CH_
|
|
||||||
#pragma package <opencv>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef _EiC
|
|
||||||
#include "cv.h"
|
|
||||||
#include "highgui.h"
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define ARRAY 1
|
|
||||||
|
|
||||||
void help()
|
|
||||||
{
|
|
||||||
printf("\nThis program demonstrates finding the minimum enclosing box or circle of a set\n"
|
|
||||||
"of points using functions: minAreaRect() minEnclosingCircle().\n"
|
|
||||||
"Random points are generated and then enclosed.\n"
|
|
||||||
"Call:\n"
|
|
||||||
"./minarea\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
int main( int argc, char** argv )
|
|
||||||
{
|
|
||||||
IplImage* img = cvCreateImage( cvSize( 500, 500 ), 8, 3 );
|
|
||||||
#if !ARRAY
|
|
||||||
CvMemStorage* storage = cvCreateMemStorage(0);
|
|
||||||
#endif
|
|
||||||
help();
|
|
||||||
cvNamedWindow( "rect & circle", 1 );
|
|
||||||
|
|
||||||
for(;;)
|
|
||||||
{
|
|
||||||
char key;
|
|
||||||
int i, count = rand()%100 + 1;
|
|
||||||
CvPoint pt0, pt;
|
|
||||||
CvBox2D box;
|
|
||||||
CvPoint2D32f box_vtx[4];
|
|
||||||
CvPoint2D32f center;
|
|
||||||
CvPoint icenter;
|
|
||||||
float radius;
|
|
||||||
#if !ARRAY
|
|
||||||
CvSeq* ptseq = cvCreateSeq( CV_SEQ_KIND_GENERIC|CV_32SC2, sizeof(CvContour),
|
|
||||||
sizeof(CvPoint), storage );
|
|
||||||
for( i = 0; i < count; i++ )
|
|
||||||
{
|
|
||||||
pt0.x = rand() % (img->width/2) + img->width/4;
|
|
||||||
pt0.y = rand() % (img->height/2) + img->height/4;
|
|
||||||
cvSeqPush( ptseq, &pt0 );
|
|
||||||
}
|
|
||||||
#ifndef _EiC /* unfortunately, here EiC crashes */
|
|
||||||
box = cvMinAreaRect2( ptseq, 0 );
|
|
||||||
#endif
|
|
||||||
cvMinEnclosingCircle( ptseq, ¢er, &radius );
|
|
||||||
#else
|
|
||||||
CvPoint* points = (CvPoint*)malloc( count * sizeof(points[0]));
|
|
||||||
CvMat pointMat = cvMat( 1, count, CV_32SC2, points );
|
|
||||||
|
|
||||||
for( i = 0; i < count; i++ )
|
|
||||||
{
|
|
||||||
pt0.x = rand() % (img->width/2) + img->width/4;
|
|
||||||
pt0.y = rand() % (img->height/2) + img->height/4;
|
|
||||||
points[i] = pt0;
|
|
||||||
}
|
|
||||||
#ifndef _EiC
|
|
||||||
box = cvMinAreaRect2( &pointMat, 0 );
|
|
||||||
#endif
|
|
||||||
cvMinEnclosingCircle( &pointMat, ¢er, &radius );
|
|
||||||
#endif
|
|
||||||
cvBoxPoints( box, box_vtx );
|
|
||||||
cvZero( img );
|
|
||||||
for( i = 0; i < count; i++ )
|
|
||||||
{
|
|
||||||
#if !ARRAY
|
|
||||||
pt0 = *CV_GET_SEQ_ELEM( CvPoint, ptseq, i );
|
|
||||||
#else
|
|
||||||
pt0 = points[i];
|
|
||||||
#endif
|
|
||||||
cvCircle( img, pt0, 2, CV_RGB( 255, 0, 0 ), CV_FILLED, CV_AA, 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef _EiC
|
|
||||||
pt0.x = cvRound(box_vtx[3].x);
|
|
||||||
pt0.y = cvRound(box_vtx[3].y);
|
|
||||||
for( i = 0; i < 4; i++ )
|
|
||||||
{
|
|
||||||
pt.x = cvRound(box_vtx[i].x);
|
|
||||||
pt.y = cvRound(box_vtx[i].y);
|
|
||||||
cvLine(img, pt0, pt, CV_RGB(0, 255, 0), 1, CV_AA, 0);
|
|
||||||
pt0 = pt;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
icenter.x = cvRound(center.x);
|
|
||||||
icenter.y = cvRound(center.y);
|
|
||||||
cvCircle( img, icenter, cvRound(radius), CV_RGB(255, 255, 0), 1, CV_AA, 0 );
|
|
||||||
|
|
||||||
cvShowImage( "rect & circle", img );
|
|
||||||
|
|
||||||
key = (char) cvWaitKey(0);
|
|
||||||
if( key == 27 || key == 'q' || key == 'Q' ) // 'ESC'
|
|
||||||
break;
|
|
||||||
|
|
||||||
#if !ARRAY
|
|
||||||
cvClearMemStorage( storage );
|
|
||||||
#else
|
|
||||||
free( points );
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
cvDestroyWindow( "rect & circle" );
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef _EiC
|
|
||||||
main(1,"convexhull.c");
|
|
||||||
#endif
|
|
||||||
|
|