@ -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. |
|
@ -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 |
|
||||||
|
|