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
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
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
00043 if (rotate) {
00044 camRoi = camRoi.t();
00045 cv::flip(camRoi, camRoi, 1);
00046 }
00047
00048
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 }