summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Redfern <tim@herge.(none)>2013-07-09 17:33:12 +0100
committerTim Redfern <tim@herge.(none)>2013-07-09 17:33:12 +0100
commit0606ec24cbc1301b50f9f4bb2eae030d0658315f (patch)
tree2184fe8750f633182fdb7ec70e9930e162464ce0
parent06c6f158088ce9132375cfe7f5c27f7c200b44dc (diff)
starting to wrap opencv
-rw-r--r--opencv/Makefile253
-rw-r--r--opencv/cvimage.h217
-rw-r--r--opencv/hello-opencv.cpp69
-rw-r--r--opencv/hello-opencv.d196
-rw-r--r--opencv/hello-opencv.obin0 -> 5560 bytes
-rwxr-xr-xopencv/opencvbin0 -> 12500 bytes
6 files changed, 735 insertions, 0 deletions
diff --git a/opencv/Makefile b/opencv/Makefile
new file mode 100644
index 0000000..86ae740
--- /dev/null
+++ b/opencv/Makefile
@@ -0,0 +1,253 @@
+# The pre-processor and compiler options.
+
+#http://docs.gstreamer.com/display/GstSDK/Installing+on+Linux
+
+#MY_CFLAGS = -fpermissive -std=c++11 -Wno-error -I /opt/gstreamer-sdk/include/gstreamer-0.10/ -I /opt/gstreamer-sdk/include/glib-2.0 -I /opt/gstreamer-sdk/lib/glib-2.0/include -I /opt/gstreamer-sdk/include/libxml2 $(shell pkg-config gstreamer-0.10 gstreamer-video-0.10 gstreamer-base-0.10 --cflags)
+MY_CFLAGS = -fpermissive -std=c++11 -I /usr/include/opencv
+#-Wno-error $(shell pkg-config gstreamer-0.10 gstreamer-video-0.10 gstreamer-base-0.10 --cflags)
+
+# -I ../ffmpeg
+
+# The linker options.libgstaasinklibgstaasink.so
+MY_LIBS = -lopencv_core -lopencv_video -lopencv_highgui -lPocoNet -lPocoXML -lPocoUtil -lPocoFoundation -lvamp-hostsdk -lsndfile -L /usr/local/lib -lswscale -lavcodec -lavformat -lavfilter -lavdevice -lavutil -lstdc++ -lm
+#MY_LIBS = -lPocoNet -lPocoXML -lPocoUtil -lPocoFoundation -lvamp-hostsdk -lsndfile -L /usr/local/lib -lswscale -lavcodec -lavformat -lavfilter -lavdevice -lavutil $(shell pkg-config gstreamer-0.10 gstreamer-video-0.10 gstreamer-base-0.10 --libs)
+# -lgstreamer-0.10 -lgstreamer-video-0.10 -lgstreamer-base-0.10 -lglib-2.0 -lgstapp-0.10
+#MY_LIBS = ../libavcodec/ffmpeg/libavcodec/libavcodec.a ../libavcodec/ffmpeg/libavutil/libavutil.a ../libavcodec/ffmpeg/libavformat/libavformat.a ../libavcodec/ffmpeg/libavfilter/libavfilter.a ../libavcodec/ffmpeg/libavdevice/libavdevice.a -lPocoNet -lPocoXML -lPocoUtil -lPocoFoundation -lvamp-hostsdk
+#GAH! HARD!
+
+# The pre-processor options used by the cpp (man cpp for more).
+CPPFLAGS = -Wall
+
+# The options used in linking as well as in any direct use of ld.
+LDFLAGS =
+
+# The directories in which source files reside.
+# If not specified, only the current directory will be serached.
+SRCDIRS =
+
+# The executable file name.
+# If not specified, current directory name or `a.out' will be used.
+PROGRAM =
+
+## Implicit Section: change the following only when necessary.
+##==========================================================================
+
+# The source file types (headers excluded).
+# .c indicates C source files, and others C++ ones.
+SRCEXTS = .c .C .cc .cpp .CPP .c++ .cxx .cp
+
+# The header file types.
+HDREXTS = .h .H .hh .hpp .HPP .h++ .hxx .hp
+
+# The pre-processor and compiler options.
+# Users can override those variables from the command line.
+CFLAGS = -g -O2
+CXXFLAGS=
+CXX = colorgcc
+
+# The C program compiler.
+#CC = gcc
+
+# The C++ program compiler.
+#CXX = g++
+
+# Un-comment the following line to compile C programs as C++ ones.
+#CC = $(CXX)
+
+# The command used to delete file.
+RM = rm -f
+
+ETAGS = etags
+ETAGSFLAGS =
+
+CTAGS = ctags
+CTAGSFLAGS =
+
+## Stable Section: usually no need to be changed. But you can add more.
+##==========================================================================
+SHELL = /bin/sh
+EMPTY =
+SPACE = $(EMPTY) $(EMPTY)
+ifeq ($(PROGRAM),)
+ CUR_PATH_NAMES = $(subst /,$(SPACE),$(subst $(SPACE),_,$(CURDIR)))
+ PROGRAM = $(word $(words $(CUR_PATH_NAMES)),$(CUR_PATH_NAMES))
+ ifeq ($(PROGRAM),)
+ PROGRAM = a.out
+ endif
+endif
+ifeq ($(SRCDIRS),)
+ SRCDIRS = .
+endif
+SOURCES = $(foreach d,$(SRCDIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS))))
+HEADERS = $(foreach d,$(SRCDIRS),$(wildcard $(addprefix $(d)/*,$(HDREXTS))))
+SRC_CXX = $(filter-out %.c,$(SOURCES))
+OBJS = $(addsuffix .o, $(basename $(SOURCES)))
+DEPS = $(OBJS:.o=.d)
+
+## Define some useful variables.
+DEP_OPT = $(shell if `$(CC) --version | grep "GCC" >/dev/null`; then \
+ echo "-MM -MP"; else echo "-M"; fi )
+DEPEND = $(CC) $(DEP_OPT) $(MY_CFLAGS) $(CFLAGS) $(CPPFLAGS)
+DEPEND.d = $(subst -g ,,$(DEPEND))
+COMPILE.c = $(CC) $(MY_CFLAGS) $(CFLAGS) $(CPPFLAGS) -c
+COMPILE.cxx = $(CXX) $(MY_CFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c
+LINK.c = $(CC) $(MY_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)
+LINK.cxx = $(CXX) $(MY_CFLAGS) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS)
+
+.PHONY: all objs tags ctags clean distclean help show install
+
+# Delete the default suffixes
+.SUFFIXES:
+
+all: Release
+
+Clang: CXX = clang
+
+Clang: $(PROGRAM)
+
+Release: CXXFLAGS += -O2
+
+Release: $(PROGRAM)
+
+Debug: CXXFLAGS += -g3
+
+Debug: $(PROGRAM)
+
+prefix=/usr/local
+
+Install: rotord
+ strip rotord
+ install -m 0755 rotord $(prefix)/bin
+
+
+# Rules for creating dependency files (.d).
+#------------------------------------------
+
+%.d:%.c
+ @echo -n $(dir $<) > $@
+ @$(DEPEND.d) $< >> $@
+
+%.d:%.C
+ @echo -n $(dir $<) > $@
+ @$(DEPEND.d) $< >> $@
+
+%.d:%.cc
+ @echo -n $(dir $<) > $@
+ @$(DEPEND.d) $< >> $@
+
+%.d:%.cpp
+ @echo -n $(dir $<) > $@
+ @$(DEPEND.d) $< >> $@
+
+%.d:%.CPP
+ @echo -n $(dir $<) > $@
+ @$(DEPEND.d) $< >> $@
+
+%.d:%.c++
+ @echo -n $(dir $<) > $@
+ @$(DEPEND.d) $< >> $@
+
+%.d:%.cp
+ @echo -n $(dir $<) > $@
+ @$(DEPEND.d) $< >> $@
+
+%.d:%.cxx
+ @echo -n $(dir $<) > $@
+ @$(DEPEND.d) $< >> $@
+
+# Rules for generating object files (.o).
+#----------------------------------------
+objs:$(OBJS)
+
+%.o:%.c
+ $(COMPILE.c) $< -o $@
+
+%.o:%.C
+ $(COMPILE.cxx) $< -o $@
+
+%.o:%.cc
+ $(COMPILE.cxx) $< -o $@
+
+%.o:%.cpp
+ $(COMPILE.cxx) $< -o $@
+
+%.o:%.CPP
+ $(COMPILE.cxx) $< -o $@
+
+%.o:%.c++
+ $(COMPILE.cxx) $< -o $@
+
+%.o:%.cp
+ $(COMPILE.cxx) $< -o $@
+
+%.o:%.cxx
+ $(COMPILE.cxx) $< -o $@
+
+# Rules for generating the tags.
+#-------------------------------------
+tags: $(HEADERS) $(SOURCES)
+ $(ETAGS) $(ETAGSFLAGS) $(HEADERS) $(SOURCES)
+
+ctags: $(HEADERS) $(SOURCES)
+ $(CTAGS) $(CTAGSFLAGS) $(HEADERS) $(SOURCES)
+
+# Rules for generating the executable.
+#-------------------------------------
+$(PROGRAM):$(OBJS)
+ifeq ($(SRC_CXX),) # C program
+ $(LINK.c) $(OBJS) $(MY_LIBS) -o $@
+ @echo Type ./$@ to execute the program.
+else # C++ program
+ $(LINK.cxx) $(OBJS) $(MY_LIBS) -o $@
+ @echo Type ./$@ to execute the program.
+endif
+
+ifndef NODEP
+ifneq ($(DEPS),)
+ sinclude $(DEPS)
+endif
+endif
+
+
+clean:
+ $(RM) $(OBJS) $(PROGRAM) $(PROGRAM).exe
+
+distclean: clean
+ $(RM) $(DEPS) TAGS
+
+# Show help.
+help:
+ @echo 'Generic Makefile for C/C++ Programs (gcmakefile) version 0.5'
+ @echo 'Copyright (C) 2007, 2008 whyglinux <whyglinux@hotmail.com>'
+ @echo
+ @echo 'Usage: make [TARGET]'
+ @echo 'TARGETS:'
+ @echo ' all (=make) compile and link.'
+ @echo ' NODEP=yes make without generating dependencies.'
+ @echo ' objs compile only (no linking).'
+ @echo ' tags create tags for Emacs editor.'
+ @echo ' ctags create ctags for VI editor.'
+ @echo ' clean clean objects and the executable file.'
+ @echo ' distclean clean objects, the executable and dependencies.'
+ @echo ' show show variables (for debug use only).'
+ @echo ' help print this message.'
+ @echo
+ @echo 'Report bugs to <whyglinux AT gmail DOT com>.'
+
+# Show variables (for debug use only.)
+show:
+ @echo 'PROGRAM :' $(PROGRAM)
+ @echo 'SRCDIRS :' $(SRCDIRS)
+ @echo 'HEADERS :' $(HEADERS)
+ @echo 'SOURCES :' $(SOURCES)
+ @echo 'SRC_CXX :' $(SRC_CXX)
+ @echo 'OBJS :' $(OBJS)
+ @echo 'DEPS :' $(DEPS)
+ @echo 'DEPEND :' $(DEPEND)
+ @echo 'COMPILE.c :' $(COMPILE.c)
+ @echo 'COMPILE.cxx :' $(COMPILE.cxx)
+ @echo 'link.c :' $(LINK.c)
+ @echo 'link.cxx :' $(LINK.cxx)
+
+## End of the Makefile ## Suggestions are welcome ## All rights reserved ##
+#############################################################################
diff --git a/opencv/cvimage.h b/opencv/cvimage.h
new file mode 100644
index 0000000..b96f704
--- /dev/null
+++ b/opencv/cvimage.h
@@ -0,0 +1,217 @@
+#include <math.h>
+
+using namespace std;
+
+//converting to use a cv image...
+
+namespace Rotor {
+ class pixeltables{
+ //handy pixel arithmetic lookup tables as nested arrays
+ //so - pixels.add[0x78][0x66]; will give the precalculated result of adding with saturation
+ // pixels.mono_weights[0][0x100]; will give the red component to convert to mono
+ public:
+ pixeltables(){
+ add=new uint8_t*[256];
+ multiply=new uint8_t*[256];
+ for (int i=0;i<256;i++){
+ add[i]=new uint8_t[256];
+ multiply[i]=new uint8_t[256];
+ for (int j=0;j<256;j++){
+ add[i][j]=(uint8_t)min(i+j,0xFF);
+ multiply[i][j]=(uint8_t)((((float)i)/255.0f)*(((float)j)/255.0f)*255.0f);
+ }
+ }
+ mono_weights=new uint8_t*[3];
+ float weights[3]={0.2989, 0.5870, 0.1140};
+ for (int i=0;i<3;i++) {
+ mono_weights[i]=new uint8_t[256];
+ for (int j=0;j<256;j++){
+ mono_weights[i][j]=(uint8_t)(((float)j)*weights[i]);
+ }
+ }
+ }
+ virtual ~pixeltables(){
+ for (int i=0;i<256;i++){
+ delete[] add[i];
+ delete[] multiply[i];
+ }
+ delete[] add;
+ delete[] multiply;
+ for (int i=0;i<3;i++) {
+ delete[] mono_weights[i];
+ }
+ delete[] mono_weights;
+ }
+ uint8_t **add;
+ uint8_t **multiply;
+ uint8_t **mono_weights;
+ };
+ static pixeltables pixels;
+ class Image{
+ public:
+ Image(){
+ zero();
+ };
+ Image(int _w,int _h){
+ zero();
+ setup(_w,_h);
+ };
+ ~Image() {
+ free();
+ };
+ void free(){
+ if (RGBdata&&ownsRGBdata) delete[] RGBdata;
+ if (Adata&&ownsAdata) delete[] Adata;
+ if (Zdata&&ownsZdata) delete[] Zdata;
+ zero();
+ }
+ void zero(){
+ RGBdata=nullptr;
+ Adata=nullptr;
+ Zdata=nullptr;
+ w=0;
+ h=0;
+ ownsRGBdata=ownsAdata=ownsZdata=false;
+ }
+ bool setup(int _w,int _h){ //set up with internal data
+ if (w!=_w||h!=_h||!ownsRGBdata||!ownsAdata||!ownsZdata){
+ free();
+ w=_w;
+ h=_h;
+ RGBdata=new uint8_t[w*h*3];
+ Adata=new uint8_t[w*h];
+ Zdata=new uint16_t[w*h];
+ ownsRGBdata=ownsAdata=ownsZdata=true;
+ return true;
+ }
+ else return false;
+ }
+ bool setup_fromRGB(int _w,int _h,uint8_t *pRGBdata){ //possibility of just resetting pointer?
+ if (w!=_w||h!=_h||ownsRGBdata||!ownsAdata||!ownsZdata){
+ free();
+ w=_w;
+ h=_h;
+ RGBdata=pRGBdata;
+ Adata=new uint8_t[w*h];
+ Zdata=new uint16_t[w*h];
+ ownsRGBdata=false;
+ ownsAdata=ownsZdata=true;
+ return true;
+ }
+ return false;
+ }
+ Image* clone(){
+ Image *t=new Image(w,h);
+ for (int i=0;i<w*h*3;i++) {
+ t->RGBdata[i]=RGBdata[i];
+ }
+ return t;
+ }
+ Image & operator+=(const Image &other) {
+ if (other.w!=w||other.h!=h) {
+ cerr<<"Rotor: cannot add images with different sizes! (wanted "<<w<<"x"<<h<<", got "<<other.w<<"x"<<other.h<<")"<<endl;
+ }
+ else {
+ for (int i=0;i<w*h*3;i++){
+ //calculate with tables
+ RGBdata[i]=pixels.add[RGBdata[i]][other.RGBdata[i]];
+ }
+ }
+ return *this;
+ }
+ Image & operator*=(const Image &other) {
+ if (other.w!=w||other.h!=h) {
+ cerr<<"Rotor: cannot multiply images with different sizes! (wanted "<<w<<"x"<<h<<", got "<<other.w<<"x"<<other.h<<")"<<endl;
+ }
+ else {
+ for (int i=0;i<w*h*3;i++){
+ //calculate with tables
+ uint8_t p1=RGBdata[i];
+ uint8_t p2=other.RGBdata[i];
+ RGBdata[i]=pixels.multiply[RGBdata[i]][other.RGBdata[i]];
+ }
+ }
+ return *this;
+ }
+ Image & add_wrap(const Image &other) {
+ if (other.w!=w||other.h!=h) {
+ cerr<<"Rotor: cannot add images with different sizes! (wanted "<<w<<"x"<<h<<", got "<<other.w<<"x"<<other.h<<")"<<endl;
+ }
+ else {
+ for (int i=0;i<w*h*3;i++){
+ //creates rainbow overload
+ RGBdata[i]=(unsigned char)(((int)other.RGBdata[i]+(int)RGBdata[i]));
+ }
+ }
+ return *this;
+ }
+ //scalar operations allocate a new image.
+ //maybe this could not be the case if the data is owned by this image?
+ //need to look into auto_ptr
+ Image & operator*=(const float &amount) {
+ uint8_t *LUT=new uint8_t[256];
+ for (int i=0;i<256;i++) {
+ LUT[i]=(uint8_t)min(0xFF,max(0,(int)(i*amount)));
+ }
+ for (int i=0;i<w*h*3;i++){
+ //calculate with table
+ RGBdata[i]=LUT[RGBdata[i]];
+ }
+ delete[] LUT;
+ return *this;
+ }
+ Image * operator*(const float &amount) {
+ Image *other=new Image(w,h);
+ uint8_t *LUT=new uint8_t[256];
+ for (int i=0;i<256;i++) {
+ LUT[i]=(uint8_t)min(0xFF,max(0,(int)(i*amount)));
+ }
+ for (int i=0;i<w*h*3;i++){
+ other->RGBdata[i]=LUT[RGBdata[i]];
+ }
+ delete[] LUT;
+ return other;
+ }
+ Image * operator+(const float &amount) {
+ Image *other=new Image(w,h);
+ uint8_t *LUT=new uint8_t[256];
+ for (int i=0;i<256;i++) {
+ LUT[i]=(uint8_t)min(0xFF,max(0,(int)(i+(amount*255.0f))));
+ }
+ for (int i=0;i<w*h*3;i++){
+ other->RGBdata[i]=LUT[RGBdata[i]];
+ }
+ delete[] LUT;
+ return other;
+ }
+ Image * operator-(const float &amount) {
+ Image *other=new Image(w,h);
+ uint8_t *LUT=new uint8_t[256];
+ for (int i=0;i<256;i++) {
+ LUT[i]=(uint8_t)min(0xFF,max(0,(int)(i-(amount*255.0f))));
+ }
+ for (int i=0;i<w*h*3;i++){
+ other->RGBdata[i]=LUT[RGBdata[i]];
+ }
+ delete[] LUT;
+ return other;
+ }
+ Image * operator/(const float &amount) {
+ Image *other=new Image(w,h);
+ uint8_t *LUT=new uint8_t[256];
+ for (int i=0;i<256;i++) {
+ LUT[i]=(uint8_t)min(0xFF,max(0,(int)(i/amount)));
+ }
+ for (int i=0;i<w*h*3;i++){
+ other->RGBdata[i]=LUT[RGBdata[i]];
+ }
+ delete[] LUT;
+ return other;
+ }
+ uint8_t *RGBdata;
+ uint8_t *Adata;
+ uint16_t *Zdata;
+ int h,w;
+ bool ownsRGBdata,ownsAdata,ownsZdata; //better done through auto_ptr?
+ };
+} \ No newline at end of file
diff --git a/opencv/hello-opencv.cpp b/opencv/hello-opencv.cpp
new file mode 100644
index 0000000..ed8de6b
--- /dev/null
+++ b/opencv/hello-opencv.cpp
@@ -0,0 +1,69 @@
+////////////////////////////////////////////////////////////////////////
+//
+// hello-world.cpp
+//
+// This is a simple, introductory OpenCV program. The program reads an
+// image from a file, inverts it, and displays the result.
+//
+////////////////////////////////////////////////////////////////////////
+
+//plan:
+//incorporate opencv images into the Rotor::image class
+//initially:: update to support existing operations
+//should all functionality that accesses image pixels be a part of the image class?
+
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+#include <cv.h>
+#include <highgui.h>
+
+#include "cvimage.h"
+
+
+int main(int argc, char *argv[])
+{
+ IplImage* img = 0;
+ int height,width,step,channels;
+ uchar *data;
+ int i,j,k;
+
+ if(argc<2){
+ printf("Usage: main <image-file-name>\n\7");
+ exit(0);
+ }
+
+ // load an image
+ img=cvLoadImage(argv[1]);
+ if(!img){
+ printf("Could not load image file: %s\n",argv[1]);
+ exit(0);
+ }
+
+ // get the image data
+ height = img->height;
+ width = img->width;
+ step = img->widthStep;
+ channels = img->nChannels;
+ data = (uchar *)img->imageData;
+ printf("Processing a %dx%d image with %d channels\n",height,width,channels);
+
+ // create a window
+ cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE);
+ cvMoveWindow("mainWin", 100, 100);
+
+ // invert the image
+ for(i=0;i<height;i++) for(j=0;j<width;j++) for(k=0;k<channels;k++)
+ data[i*step+j*channels+k]=255-data[i*step+j*channels+k];
+
+ // show the image
+ cvShowImage("mainWin", img );
+
+ // wait for a key
+ cvWaitKey(0);
+
+ // release the image
+ cvReleaseImage(&img );
+ return 0;
+}
diff --git a/opencv/hello-opencv.d b/opencv/hello-opencv.d
new file mode 100644
index 0000000..eebafe9
--- /dev/null
+++ b/opencv/hello-opencv.d
@@ -0,0 +1,196 @@
+./hello-opencv.o: hello-opencv.cpp /usr/include/stdlib.h \
+ /usr/include/features.h /usr/include/i386-linux-gnu/bits/predefs.h \
+ /usr/include/i386-linux-gnu/sys/cdefs.h \
+ /usr/include/i386-linux-gnu/bits/wordsize.h \
+ /usr/include/i386-linux-gnu/gnu/stubs.h \
+ /usr/include/i386-linux-gnu/gnu/stubs-32.h \
+ /usr/lib/gcc/i686-linux-gnu/4.7/include/stddef.h \
+ /usr/include/i386-linux-gnu/bits/waitflags.h \
+ /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/i386-linux-gnu/bits/endian.h \
+ /usr/include/i386-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \
+ /usr/include/i386-linux-gnu/sys/types.h \
+ /usr/include/i386-linux-gnu/bits/types.h \
+ /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/time.h \
+ /usr/include/i386-linux-gnu/sys/select.h \
+ /usr/include/i386-linux-gnu/bits/select.h \
+ /usr/include/i386-linux-gnu/bits/sigset.h \
+ /usr/include/i386-linux-gnu/bits/time.h \
+ /usr/include/i386-linux-gnu/bits/select2.h \
+ /usr/include/i386-linux-gnu/sys/sysmacros.h \
+ /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/i386-linux-gnu/bits/stdlib.h /usr/include/stdio.h \
+ /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/i686-linux-gnu/4.7/include/stdarg.h \
+ /usr/include/i386-linux-gnu/bits/stdio_lim.h \
+ /usr/include/i386-linux-gnu/bits/sys_errlist.h \
+ /usr/include/i386-linux-gnu/bits/stdio.h \
+ /usr/include/i386-linux-gnu/bits/stdio2.h /usr/include/math.h \
+ /usr/include/i386-linux-gnu/bits/huge_val.h \
+ /usr/include/i386-linux-gnu/bits/huge_valf.h \
+ /usr/include/i386-linux-gnu/bits/huge_vall.h \
+ /usr/include/i386-linux-gnu/bits/inf.h \
+ /usr/include/i386-linux-gnu/bits/nan.h \
+ /usr/include/i386-linux-gnu/bits/mathdef.h \
+ /usr/include/i386-linux-gnu/bits/mathcalls.h \
+ /usr/include/i386-linux-gnu/bits/mathinline.h /usr/include/opencv/cv.h \
+ /usr/include/opencv2/core/core_c.h /usr/include/opencv2/core/types_c.h \
+ /usr/include/assert.h /usr/include/string.h \
+ /usr/include/i386-linux-gnu/bits/string3.h \
+ /usr/lib/gcc/i686-linux-gnu/4.7/include/float.h \
+ /usr/lib/gcc/i686-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \
+ /usr/include/i386-linux-gnu/bits/wchar.h \
+ /usr/include/opencv2/core/core.hpp /usr/include/opencv2/core/version.hpp \
+ /usr/lib/gcc/i686-linux-gnu/4.7/include-fixed/limits.h \
+ /usr/lib/gcc/i686-linux-gnu/4.7/include-fixed/syslimits.h \
+ /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \
+ /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \
+ /usr/include/i386-linux-gnu/bits/posix2_lim.h \
+ /usr/include/i386-linux-gnu/bits/xopen_lim.h \
+ /usr/include/c++/4.7/algorithm /usr/include/c++/4.7/utility \
+ /usr/include/c++/4.7/i686-linux-gnu/bits/c++config.h \
+ /usr/include/c++/4.7/i686-linux-gnu/bits/os_defines.h \
+ /usr/include/c++/4.7/i686-linux-gnu/bits/cpu_defines.h \
+ /usr/include/c++/4.7/bits/stl_relops.h \
+ /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \
+ /usr/include/c++/4.7/bits/concept_check.h \
+ /usr/include/c++/4.7/type_traits /usr/include/c++/4.7/initializer_list \
+ /usr/include/c++/4.7/bits/stl_algobase.h \
+ /usr/include/c++/4.7/bits/functexcept.h \
+ /usr/include/c++/4.7/bits/exception_defines.h \
+ /usr/include/c++/4.7/bits/cpp_type_traits.h \
+ /usr/include/c++/4.7/ext/type_traits.h \
+ /usr/include/c++/4.7/ext/numeric_traits.h \
+ /usr/include/c++/4.7/bits/stl_iterator_base_types.h \
+ /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \
+ /usr/include/c++/4.7/bits/stl_iterator.h \
+ /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/stl_algo.h \
+ /usr/include/c++/4.7/cstdlib /usr/include/c++/4.7/bits/algorithmfwd.h \
+ /usr/include/c++/4.7/bits/stl_heap.h \
+ /usr/include/c++/4.7/bits/stl_tempbuf.h \
+ /usr/include/c++/4.7/bits/stl_construct.h /usr/include/c++/4.7/new \
+ /usr/include/c++/4.7/exception \
+ /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \
+ /usr/include/c++/4.7/bits/exception_ptr.h \
+ /usr/include/c++/4.7/bits/nested_exception.h \
+ /usr/include/c++/4.7/ext/alloc_traits.h \
+ /usr/include/c++/4.7/bits/alloc_traits.h \
+ /usr/include/c++/4.7/bits/ptr_traits.h /usr/include/c++/4.7/random \
+ /usr/include/c++/4.7/cmath /usr/include/c++/4.7/cstdio \
+ /usr/include/c++/4.7/string /usr/include/c++/4.7/bits/stringfwd.h \
+ /usr/include/c++/4.7/bits/char_traits.h \
+ /usr/include/c++/4.7/bits/postypes.h /usr/include/c++/4.7/cwchar \
+ /usr/include/i386-linux-gnu/bits/wchar2.h /usr/include/c++/4.7/cstdint \
+ /usr/include/c++/4.7/bits/allocator.h \
+ /usr/include/c++/4.7/i686-linux-gnu/bits/c++allocator.h \
+ /usr/include/c++/4.7/ext/new_allocator.h \
+ /usr/include/c++/4.7/bits/localefwd.h \
+ /usr/include/c++/4.7/i686-linux-gnu/bits/c++locale.h \
+ /usr/include/c++/4.7/clocale /usr/include/locale.h \
+ /usr/include/i386-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \
+ /usr/include/c++/4.7/cctype /usr/include/ctype.h \
+ /usr/include/c++/4.7/bits/ostream_insert.h \
+ /usr/include/c++/4.7/bits/cxxabi_forced.h \
+ /usr/include/c++/4.7/bits/stl_function.h \
+ /usr/include/c++/4.7/backward/binders.h \
+ /usr/include/c++/4.7/bits/range_access.h \
+ /usr/include/c++/4.7/bits/basic_string.h \
+ /usr/include/c++/4.7/ext/atomicity.h \
+ /usr/include/c++/4.7/i686-linux-gnu/bits/gthr.h \
+ /usr/include/c++/4.7/i686-linux-gnu/bits/gthr-default.h \
+ /usr/include/pthread.h /usr/include/sched.h \
+ /usr/include/i386-linux-gnu/bits/sched.h \
+ /usr/include/i386-linux-gnu/bits/timex.h \
+ /usr/include/i386-linux-gnu/bits/setjmp.h \
+ /usr/include/c++/4.7/i686-linux-gnu/bits/atomic_word.h \
+ /usr/include/c++/4.7/ext/string_conversions.h \
+ /usr/include/c++/4.7/cerrno /usr/include/errno.h \
+ /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \
+ /usr/include/asm-generic/errno-base.h \
+ /usr/include/c++/4.7/bits/functional_hash.h \
+ /usr/include/c++/4.7/bits/hash_bytes.h \
+ /usr/include/c++/4.7/bits/basic_string.tcc /usr/include/c++/4.7/limits \
+ /usr/include/c++/4.7/bits/random.h /usr/include/c++/4.7/vector \
+ /usr/include/c++/4.7/bits/stl_uninitialized.h \
+ /usr/include/c++/4.7/bits/stl_vector.h \
+ /usr/include/c++/4.7/bits/stl_bvector.h \
+ /usr/include/c++/4.7/bits/vector.tcc \
+ /usr/include/c++/4.7/bits/random.tcc /usr/include/c++/4.7/numeric \
+ /usr/include/c++/4.7/bits/stl_numeric.h /usr/include/c++/4.7/functional \
+ /usr/include/c++/4.7/typeinfo /usr/include/c++/4.7/tuple \
+ /usr/include/c++/4.7/bits/uses_allocator.h /usr/include/c++/4.7/cstddef \
+ /usr/include/c++/4.7/complex /usr/include/c++/4.7/sstream \
+ /usr/include/c++/4.7/istream /usr/include/c++/4.7/ios \
+ /usr/include/c++/4.7/bits/ios_base.h \
+ /usr/include/c++/4.7/bits/locale_classes.h \
+ /usr/include/c++/4.7/bits/locale_classes.tcc \
+ /usr/include/c++/4.7/streambuf /usr/include/c++/4.7/bits/streambuf.tcc \
+ /usr/include/c++/4.7/bits/basic_ios.h \
+ /usr/include/c++/4.7/bits/locale_facets.h /usr/include/c++/4.7/cwctype \
+ /usr/include/wctype.h \
+ /usr/include/c++/4.7/i686-linux-gnu/bits/ctype_base.h \
+ /usr/include/c++/4.7/bits/streambuf_iterator.h \
+ /usr/include/c++/4.7/i686-linux-gnu/bits/ctype_inline.h \
+ /usr/include/c++/4.7/bits/locale_facets.tcc \
+ /usr/include/c++/4.7/bits/basic_ios.tcc /usr/include/c++/4.7/ostream \
+ /usr/include/c++/4.7/bits/ostream.tcc \
+ /usr/include/c++/4.7/bits/istream.tcc \
+ /usr/include/c++/4.7/bits/sstream.tcc /usr/include/c++/4.7/map \
+ /usr/include/c++/4.7/bits/stl_tree.h /usr/include/c++/4.7/bits/stl_map.h \
+ /usr/include/c++/4.7/bits/stl_multimap.h \
+ /usr/include/opencv2/core/operations.hpp \
+ /usr/include/opencv2/core/mat.hpp \
+ /usr/include/opencv2/imgproc/imgproc_c.h \
+ /usr/include/opencv2/imgproc/types_c.h \
+ /usr/include/opencv2/imgproc/imgproc.hpp \
+ /usr/include/opencv2/video/tracking.hpp \
+ /usr/include/opencv2/features2d/features2d.hpp \
+ /usr/include/opencv2/flann/miniflann.hpp \
+ /usr/include/opencv2/flann/defines.h /usr/include/opencv2/flann/config.h \
+ /usr/include/opencv2/flann/flann.hpp \
+ /usr/include/opencv2/flann/flann_base.hpp /usr/include/c++/4.7/cassert \
+ /usr/include/opencv2/flann/general.h \
+ /usr/include/opencv2/flann/defines.h /usr/include/c++/4.7/stdexcept \
+ /usr/include/opencv2/flann/matrix.h /usr/include/opencv2/flann/params.h \
+ /usr/include/opencv2/flann/any.h /usr/include/c++/4.7/iostream \
+ /usr/include/opencv2/flann/saving.h /usr/include/c++/4.7/cstring \
+ /usr/include/opencv2/flann/nn_index.h \
+ /usr/include/opencv2/flann/result_set.h /usr/include/c++/4.7/set \
+ /usr/include/c++/4.7/bits/stl_set.h \
+ /usr/include/c++/4.7/bits/stl_multiset.h \
+ /usr/include/opencv2/flann/all_indices.h \
+ /usr/include/opencv2/flann/kdtree_index.h \
+ /usr/include/opencv2/flann/dynamic_bitset.h \
+ /usr/include/opencv2/flann/dist.h /usr/include/opencv2/flann/heap.h \
+ /usr/include/opencv2/flann/allocator.h \
+ /usr/include/opencv2/flann/random.h \
+ /usr/include/opencv2/flann/kdtree_single_index.h \
+ /usr/include/opencv2/flann/kmeans_index.h \
+ /usr/include/opencv2/flann/logger.h \
+ /usr/include/opencv2/flann/composite_index.h \
+ /usr/include/opencv2/flann/linear_index.h \
+ /usr/include/opencv2/flann/hierarchical_clustering_index.h \
+ /usr/include/opencv2/flann/lsh_index.h \
+ /usr/include/opencv2/flann/lsh_table.h /usr/include/c++/4.7/iomanip \
+ /usr/include/c++/4.7/locale \
+ /usr/include/c++/4.7/bits/locale_facets_nonio.h \
+ /usr/include/c++/4.7/ctime \
+ /usr/include/c++/4.7/i686-linux-gnu/bits/time_members.h \
+ /usr/include/c++/4.7/i686-linux-gnu/bits/messages_members.h \
+ /usr/include/libintl.h /usr/include/c++/4.7/bits/codecvt.h \
+ /usr/include/c++/4.7/bits/locale_facets_nonio.tcc \
+ /usr/include/opencv2/flann/autotuned_index.h \
+ /usr/include/opencv2/flann/ground_truth.h \
+ /usr/include/opencv2/flann/index_testing.h \
+ /usr/include/opencv2/flann/timer.h /usr/include/opencv2/flann/sampling.h \
+ /usr/include/opencv2/calib3d/calib3d.hpp \
+ /usr/include/opencv2/objdetect/objdetect.hpp /usr/include/c++/4.7/deque \
+ /usr/include/c++/4.7/bits/stl_deque.h \
+ /usr/include/c++/4.7/bits/deque.tcc \
+ /usr/include/opencv2/legacy/compat.hpp \
+ /usr/include/opencv2/core/internal.hpp \
+ /usr/include/i386-linux-gnu/sys/mman.h \
+ /usr/include/i386-linux-gnu/bits/mman.h /usr/include/opencv/highgui.h \
+ /usr/include/opencv2/highgui/highgui_c.h \
+ /usr/include/opencv2/highgui/highgui.hpp cvimage.h
diff --git a/opencv/hello-opencv.o b/opencv/hello-opencv.o
new file mode 100644
index 0000000..94daefd
--- /dev/null
+++ b/opencv/hello-opencv.o
Binary files differ
diff --git a/opencv/opencv b/opencv/opencv
new file mode 100755
index 0000000..165ab7e
--- /dev/null
+++ b/opencv/opencv
Binary files differ