diff --git a/vision/CameraProcessor.h b/vision/CameraProcessor.h
new file mode 100644
index 0000000..c485bda
--- /dev/null
+++ b/vision/CameraProcessor.h
@@ -0,0 +1,89 @@
+
+#ifndef _CAMERA_PROCESSOR_H_
+#define _CAMERA_PROCESSOR_H_
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <utility>
+#include <vector>
+
+#include "opencv2/imgproc/imgproc.hpp"
+
+// an over described geometric representation of a rectangle
+class FullRect {
+	public:
+		FullRect();
+		cv::Point2f ur; // upper right
+		cv::Point2f ul; // upper left
+		cv::Point2f br; // bottom right
+		cv::Point2f bl; // bottom_left
+		cv::Point2f centroid; //centroid
+};
+
+// All data needed once a target is found
+class Target {
+	public:
+		Target(std::vector<cv::Point> new_contour,
+			std::vector<cv::Point> new_raw_contour,
+			FullRect new_rect, int new_weight, bool _is_90);
+		void refineTarget();
+		double getHeight(bool is_90);
+		FullRect rect; // geometric representation of the target
+		std::vector<cv::Point> this_contour; // opencv contour of target
+		std::vector<cv::Point> raw_contour; // opencv contour of target
+		double height; // top target to robot
+		double weight; // confidence in this target
+};
+
+// main class for processing image data. All relavent data should be
+// accessible through this structure.
+class ProcessorData {
+	public:
+		ProcessorData(int width, int height, bool is_90_);
+		~ProcessorData();
+		void RGBtoHSV(uchar r, uchar g, uchar b,
+			uchar *h, uchar *s, uchar *v);
+		void threshold(uchar* buffer);
+		void getContours();
+		void filterToTargets();
+		void clear();
+	//protected:
+		int img_width; // all images should be this width
+		int img_height; // and this height
+		bool is_90;
+		int buffer_size; // width * height * 3
+		IplImage *grey_image; // thresholded image
+		cv::Mat *grey_mat; // Matrix representaion (just a header)
+		std::vector<std::pair<std::vector<cv::Point>,
+			std::vector<cv::Point> > > contour_pairs;
+		//std::vector<std::vector<cv::Point> > contours; // filtered contours
+		//yystd::vector<std::vector<cv::Point> > raw_contours; //original contours
+		std::vector<cv::Vec4i> hierarchy; // ordering on contours
+		cv::MemStorage g_storage; // opencv storage
+		static const int HIST_SIZE = 20; // dimension of histogram
+								 // ie number of scan lines
+		static constexpr double HIST_SIZE_F = 1.0/20.0; // step size
+											// should be 1/HIST_SIZE
+		double vert_hist[HIST_SIZE]; // desired vertical histogram
+		double horz_hist[HIST_SIZE]; // desired horizontal histogram
+		// defines the minimum dist for a match
+		static constexpr double HIST_MATCH = 1.76;
+		double calcHistComponent(
+				cv::Point2i start,
+				cv::Point2i end,
+				cv::Mat thresh_img);
+		double checkHistogram(
+				FullRect rect,
+				cv::Mat thresh_img);
+	public:
+		int h1, s1, v1, h2, s2, v2; // HSV min and max
+									// must be public for tuning
+		IplImage * global_display;
+
+		IplImage *src_header_image; // header for main image
+		std::vector<Target> target_list; // list of found targets
+};
+
+#endif //_CAMERA_PROCESSOR_H_
+
