Commit 97ea5bf9 authored by Suleyman TURKMEN's avatar Suleyman TURKMEN Committed by Vadim Pisarevsky

Update plot module (#1367)

* Update plot.hpp

* update

* plot_demo

* remove_tabs

* Update plot_demo.cpp

* Update plot.hpp

* Update plot.hpp
parent eef53c29
...@@ -99,17 +99,19 @@ namespace cv ...@@ -99,17 +99,19 @@ namespace cv
* @brief Creates Plot2d object * @brief Creates Plot2d object
* *
* @param data \f$1xN\f$ or \f$Nx1\f$ matrix containing \f$Y\f$ values of points to plot. \f$X\f$ values * @param data \f$1xN\f$ or \f$Nx1\f$ matrix containing \f$Y\f$ values of points to plot. \f$X\f$ values
* @param _invertOrientation true means the y axis is inverted
* will be equal to indexes of correspondind elements in data matrix. * will be equal to indexes of correspondind elements in data matrix.
*/ */
CV_WRAP static Ptr<Plot2d> create(InputArray data); CV_WRAP static Ptr<Plot2d> create(InputArray data, bool _invertOrientation=false);
/** /**
* @brief Creates Plot2d object * @brief Creates Plot2d object
* *
* @param dataX \f$1xN\f$ or \f$Nx1\f$ matrix \f$X\f$ values of points to plot. * @param dataX \f$1xN\f$ or \f$Nx1\f$ matrix \f$X\f$ values of points to plot.
* @param dataY \f$1xN\f$ or \f$Nx1\f$ matrix containing \f$Y\f$ values of points to plot. * @param dataY \f$1xN\f$ or \f$Nx1\f$ matrix containing \f$Y\f$ values of points to plot.
* @param _invertOrientation true means the y axis is inverted
*/ */
CV_WRAP static Ptr<Plot2d> create(InputArray dataX, InputArray dataY); CV_WRAP static Ptr<Plot2d> create(InputArray dataX, InputArray dataY, bool _invertOrientation=false);
}; };
//! @} //! @}
} }
......
#include <opencv2/highgui.hpp>
#include <opencv2/plot.hpp>
#include <iostream>
using namespace cv;
int main()
{
Mat data_x(1, 50, CV_64F);
Mat data_y(1, 50, CV_64F);
for (int i = 0; i < 50; i++)
{
data_x.at<double>(0, i) = (i - 25);
data_y.at<double>(0, i) = (i - 25)*(i - 25)*(i - 25);
}
std::cout << "data_x : " << data_x << std::endl;
std::cout << "data_y : " << data_y << std::endl;
Mat plot_result;
Ptr<plot::Plot2d> plot = plot::Plot2d::create(data_x, data_y);
plot->render(plot_result);
imshow("default orientation", plot_result);
plot = plot::Plot2d::create(data_x, data_y,true);
plot->render(plot_result);
imshow("inverted orientation", plot_result);
waitKey();
return 0;
}
...@@ -57,8 +57,9 @@ namespace cv ...@@ -57,8 +57,9 @@ namespace cv
{ {
public: public:
Plot2dImpl(InputArray plotData) Plot2dImpl(InputArray plotData, bool _invertOrientation)
{ {
invertOrientation = _invertOrientation;
Mat _plotData = plotData.getMat(); Mat _plotData = plotData.getMat();
//if the matrix is not Nx1 or 1xN //if the matrix is not Nx1 or 1xN
if(_plotData.cols > 1 && _plotData.rows > 1) if(_plotData.cols > 1 && _plotData.rows > 1)
...@@ -84,8 +85,9 @@ namespace cv ...@@ -84,8 +85,9 @@ namespace cv
} }
Plot2dImpl(InputArray plotDataX_, InputArray plotDataY_) Plot2dImpl(InputArray plotDataX_, InputArray plotDataY_, bool _invertOrientation)
{ {
invertOrientation = _invertOrientation;
Mat _plotDataX = plotDataX_.getMat(); Mat _plotDataX = plotDataX_.getMat();
Mat _plotDataY = plotDataY_.getMat(); Mat _plotDataY = plotDataY_.getMat();
//f the matrix is not Nx1 or 1xN //f the matrix is not Nx1 or 1xN
...@@ -199,11 +201,15 @@ namespace cv ...@@ -199,11 +201,15 @@ namespace cv
int NumVecElements = plotDataX.rows; int NumVecElements = plotDataX.rows;
Mat InterpXdata = linearInterpolation(plotMinX, plotMaxX, 0, plotSizeWidth, plotDataX); Mat InterpXdata = linearInterpolation(plotMinX, plotMaxX, 0, plotSizeWidth, plotDataX);
Mat InterpYdata = linearInterpolation(plotMinY, plotMaxY, 0, plotSizeHeight, plotDataY); Mat InterpYdata = invertOrientation ?
linearInterpolation(plotMaxY, plotMinY, 0, plotSizeHeight, plotDataY) :
linearInterpolation(plotMinY, plotMaxY, 0, plotSizeHeight, plotDataY);
//Find the zeros in image coordinates //Find the zeros in image coordinates
Mat InterpXdataFindZero = linearInterpolation(plotMinX_plusZero, plotMaxX_plusZero, 0, plotSizeWidth, plotDataX_plusZero); Mat InterpXdataFindZero = linearInterpolation(plotMinX_plusZero, plotMaxX_plusZero, 0, plotSizeWidth, plotDataX_plusZero);
Mat InterpYdataFindZero = linearInterpolation(plotMinY_plusZero, plotMaxY_plusZero, 0, plotSizeHeight, plotDataY_plusZero); Mat InterpYdataFindZero = invertOrientation ?
linearInterpolation(plotMaxY_plusZero, plotMinY_plusZero, 0, plotSizeHeight, plotDataY_plusZero) :
linearInterpolation(plotMinY_plusZero, plotMaxY_plusZero, 0, plotSizeHeight, plotDataY_plusZero);
int ImageXzero = (int)InterpXdataFindZero.at<double>(NumVecElements,0); int ImageXzero = (int)InterpXdataFindZero.at<double>(NumVecElements,0);
int ImageYzero = (int)InterpYdataFindZero.at<double>(NumVecElements,0); int ImageYzero = (int)InterpYdataFindZero.at<double>(NumVecElements,0);
...@@ -264,6 +270,7 @@ namespace cv ...@@ -264,6 +270,7 @@ namespace cv
double plotMinY_plusZero; double plotMinY_plusZero;
double plotMaxY_plusZero; double plotMaxY_plusZero;
int plotLineWidth; int plotLineWidth;
bool invertOrientation;
bool needShowGrid; bool needShowGrid;
bool needShowText; bool needShowText;
int gridLinesNumber; int gridLinesNumber;
...@@ -453,15 +460,15 @@ namespace cv ...@@ -453,15 +460,15 @@ namespace cv
}; };
Ptr<Plot2d> Plot2d::create(InputArray _plotData) Ptr<Plot2d> Plot2d::create(InputArray _plotData, bool _invertOrientation)
{ {
return Ptr<Plot2dImpl> (new Plot2dImpl (_plotData)); return Ptr<Plot2dImpl> (new Plot2dImpl (_plotData, _invertOrientation));
} }
Ptr<Plot2d> Plot2d::create(InputArray _plotDataX, InputArray _plotDataY) Ptr<Plot2d> Plot2d::create(InputArray _plotDataX, InputArray _plotDataY, bool _invertOrientation)
{ {
return Ptr<Plot2dImpl> (new Plot2dImpl (_plotDataX, _plotDataY)); return Ptr<Plot2dImpl> (new Plot2dImpl (_plotDataX, _plotDataY, _invertOrientation));
} }
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment