LadySaw.cpp
Go to the documentation of this file.
00001 
00002 #include "omnicamera/LadySaw.h"
00003 
00004 #include <opencv2/core/core.hpp>
00005 #include <opencv2/imgproc/imgproc.hpp>
00006 
00007 using std::find;
00008 using std::vector;
00009 using cv::Mat;
00010 using cv::Size;
00011 
00012 namespace omnicamera {
00013 
00014 LadySaw::LadySaw() : camsIn(vector<int>(6)), camsOut(vector<int>(6)), rotate(true), width(1232), height(1616) {
00015   camsIn.resize(6);
00016   camsOut.resize(6);
00017   for (int i = 0; i < 6; i++) {
00018     camsIn[i] = i;
00019     camsOut[i] = i;
00020   }
00021 }
00022 LadySaw::~LadySaw() {
00023 }
00024 
00025 void LadySaw::saw(const Mat frame, vector<Mat> &cams) {
00026 
00027   // Avoid resizing matrix buffers if not necessary.
00028   if (cams.size() != camsOut.size()) {
00029     cams.resize(camsOut.size());
00030   }
00031 
00032   int camRows = frame.rows / camsIn.size();
00033   for (int i = 0; i < (int) camsOut.size(); i++) {
00034     vector<int>::iterator it = find(camsIn.begin(), camsIn.end(), camsOut[i]);
00035     if (it == camsIn.end()) {
00036       // Element not found.
00037       cams[i].create(0, 0, frame.type());
00038       continue;
00039     }
00040     int iCamIn = it - camsIn.begin();
00041     Mat camRoi = frame(cv::Rect(0, iCamIn * camRows, frame.cols, camRows));
00042     // Rotate 90 deg. clock-wise if requested.
00043     if (rotate) {
00044       camRoi = camRoi.t();
00045       cv::flip(camRoi, camRoi, 1); // Flip horizontally.
00046     }
00047 
00048     // Resize if necessary and copy to output.
00049     if (width != 0 && height != 0 && (camRoi.rows != height || camRoi.cols != width)) {
00050       cv::resize(camRoi, cams[i], Size(width, height), 0, 0, CV_INTER_LINEAR);
00051     } else {
00052       camRoi.copyTo(cams[i]);
00053     }
00054   }
00055 }
00056 
00057 vector<int> LadySaw::getCamsIn() {
00058   return camsIn;
00059 }
00060 void LadySaw::setCamsIn(const vector<int> camsIn) {
00061   this->camsIn = camsIn;
00062 }
00063 vector<int> LadySaw::getCamsOut() {
00064   return camsOut;
00065 }
00066 void LadySaw::setCamsOut(const vector<int> camsOut) {
00067   this->camsOut = camsOut;
00068 }
00069 
00070 bool LadySaw::isRotate() {
00071   return rotate;
00072 }
00073 void LadySaw::setRotate(bool rotate) {
00074   this->rotate = rotate;
00075 }
00076 int LadySaw::getWidth() {
00077   return width;
00078 }
00079 void LadySaw::setWidth(int width) {
00080   this->width = width;
00081 }
00082 int LadySaw::getHeight() {
00083   return height;
00084 }
00085 void LadySaw::setHeight(int height) {
00086   this->height = height;
00087 }
00088 
00089 } // namespace omnicamera
 All Classes Namespaces Files Functions Variables Typedefs Defines


omnicamera
Author(s): Tomas Petricek / petrito1@cmp.felk.cvut.cz
autogenerated on Tue Dec 10 2013 14:26:53