Commit bb4bf7a1 authored by Roman Donchenko's avatar Roman Donchenko Committed by OpenCV Buildbot

Merge pull request #1811 from Nerei:fixed_some_build_errors

parents b8c46f4c 9e3a2970
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "cascadeclassifier.h" #include "cascadeclassifier.h"
using namespace std; using namespace std;
using namespace cv;
CvHOGFeatureParams::CvHOGFeatureParams() CvHOGFeatureParams::CvHOGFeatureParams()
{ {
......
...@@ -20,23 +20,23 @@ class CvHOGEvaluator : public CvFeatureEvaluator ...@@ -20,23 +20,23 @@ class CvHOGEvaluator : public CvFeatureEvaluator
public: public:
virtual ~CvHOGEvaluator() {} virtual ~CvHOGEvaluator() {}
virtual void init(const CvFeatureParams *_featureParams, virtual void init(const CvFeatureParams *_featureParams,
int _maxSampleCount, Size _winSize ); int _maxSampleCount, cv::Size _winSize );
virtual void setImage(const Mat& img, uchar clsLabel, int idx); virtual void setImage(const cv::Mat& img, uchar clsLabel, int idx);
virtual float operator()(int varIdx, int sampleIdx) const; virtual float operator()(int varIdx, int sampleIdx) const;
virtual void writeFeatures( FileStorage &fs, const Mat& featureMap ) const; virtual void writeFeatures( cv::FileStorage &fs, const cv::Mat& featureMap ) const;
protected: protected:
virtual void generateFeatures(); virtual void generateFeatures();
virtual void integralHistogram(const Mat &img, std::vector<Mat> &histogram, Mat &norm, int nbins) const; virtual void integralHistogram(const cv::Mat &img, std::vector<cv::Mat> &histogram, cv::Mat &norm, int nbins) const;
class Feature class Feature
{ {
public: public:
Feature(); Feature();
Feature( int offset, int x, int y, int cellW, int cellH ); Feature( int offset, int x, int y, int cellW, int cellH );
float calc( const std::vector<Mat> &_hists, const Mat &_normSum, size_t y, int featComponent ) const; float calc( const std::vector<cv::Mat> &_hists, const cv::Mat &_normSum, size_t y, int featComponent ) const;
void write( FileStorage &fs ) const; void write( cv::FileStorage &fs ) const;
void write( FileStorage &fs, int varIdx ) const; void write( cv::FileStorage &fs, int varIdx ) const;
Rect rect[N_CELLS]; //cells cv::Rect rect[N_CELLS]; //cells
struct struct
{ {
...@@ -45,8 +45,8 @@ protected: ...@@ -45,8 +45,8 @@ protected:
}; };
std::vector<Feature> features; std::vector<Feature> features;
Mat normSum; //for nomalization calculation (L1 or L2) cv::Mat normSum; //for nomalization calculation (L1 or L2)
std::vector<Mat> hist; std::vector<cv::Mat> hist;
}; };
inline float CvHOGEvaluator::operator()(int varIdx, int sampleIdx) const inline float CvHOGEvaluator::operator()(int varIdx, int sampleIdx) const
...@@ -57,7 +57,7 @@ inline float CvHOGEvaluator::operator()(int varIdx, int sampleIdx) const ...@@ -57,7 +57,7 @@ inline float CvHOGEvaluator::operator()(int varIdx, int sampleIdx) const
return features[featureIdx].calc( hist, normSum, sampleIdx, componentIdx); return features[featureIdx].calc( hist, normSum, sampleIdx, componentIdx);
} }
inline float CvHOGEvaluator::Feature::calc( const std::vector<Mat>& _hists, const Mat& _normSum, size_t y, int featComponent ) const inline float CvHOGEvaluator::Feature::calc( const std::vector<cv::Mat>& _hists, const cv::Mat& _normSum, size_t y, int featComponent ) const
{ {
float normFactor; float normFactor;
float res; float res;
......
#include "opencv2/core.hpp" #include "opencv2/core.hpp"
#include "opencv2/core/utility.hpp"
using cv::Size;
using cv::Mat;
using cv::Point;
using cv::FileStorage;
using cv::Rect;
using cv::Ptr;
using cv::FileNode;
using cv::Mat_;
using cv::Range;
using cv::FileNodeIterator;
using cv::ParallelLoopBody;
#include "boost.h" #include "boost.h"
#include "cascadeclassifier.h" #include "cascadeclassifier.h"
......
...@@ -13,8 +13,8 @@ struct CvCascadeBoostParams : CvBoostParams ...@@ -13,8 +13,8 @@ struct CvCascadeBoostParams : CvBoostParams
CvCascadeBoostParams( int _boostType, float _minHitRate, float _maxFalseAlarm, CvCascadeBoostParams( int _boostType, float _minHitRate, float _maxFalseAlarm,
double _weightTrimRate, int _maxDepth, int _maxWeakCount ); double _weightTrimRate, int _maxDepth, int _maxWeakCount );
virtual ~CvCascadeBoostParams() {} virtual ~CvCascadeBoostParams() {}
void write( FileStorage &fs ) const; void write( cv::FileStorage &fs ) const;
bool read( const FileNode &node ); bool read( const cv::FileNode &node );
virtual void printDefaults() const; virtual void printDefaults() const;
virtual void printAttrs() const; virtual void printAttrs() const;
virtual bool scanAttr( const std::string prmName, const std::string val); virtual bool scanAttr( const std::string prmName, const std::string val);
...@@ -45,7 +45,7 @@ struct CvCascadeBoostTrainData : CvDTreeTrainData ...@@ -45,7 +45,7 @@ struct CvCascadeBoostTrainData : CvDTreeTrainData
virtual void free_train_data(); virtual void free_train_data();
const CvFeatureEvaluator* featureEvaluator; const CvFeatureEvaluator* featureEvaluator;
Mat valCache; // precalculated feature values (CV_32FC1) cv::Mat valCache; // precalculated feature values (CV_32FC1)
CvMat _resp; // for casting CvMat _resp; // for casting
int numPrecalcVal, numPrecalcIdx; int numPrecalcVal, numPrecalcIdx;
}; };
...@@ -54,9 +54,9 @@ class CvCascadeBoostTree : public CvBoostTree ...@@ -54,9 +54,9 @@ class CvCascadeBoostTree : public CvBoostTree
{ {
public: public:
virtual CvDTreeNode* predict( int sampleIdx ) const; virtual CvDTreeNode* predict( int sampleIdx ) const;
void write( FileStorage &fs, const Mat& featureMap ); void write( cv::FileStorage &fs, const cv::Mat& featureMap );
void read( const FileNode &node, CvBoost* _ensemble, CvDTreeTrainData* _data ); void read( const cv::FileNode &node, CvBoost* _ensemble, CvDTreeTrainData* _data );
void markFeaturesInMap( Mat& featureMap ); void markFeaturesInMap( cv::Mat& featureMap );
protected: protected:
virtual void split_node_data( CvDTreeNode* n ); virtual void split_node_data( CvDTreeNode* n );
}; };
...@@ -70,10 +70,10 @@ public: ...@@ -70,10 +70,10 @@ public:
virtual float predict( int sampleIdx, bool returnSum = false ) const; virtual float predict( int sampleIdx, bool returnSum = false ) const;
float getThreshold() const { return threshold; } float getThreshold() const { return threshold; }
void write( FileStorage &fs, const Mat& featureMap ) const; void write( cv::FileStorage &fs, const cv::Mat& featureMap ) const;
bool read( const FileNode &node, const CvFeatureEvaluator* _featureEvaluator, bool read( const cv::FileNode &node, const CvFeatureEvaluator* _featureEvaluator,
const CvCascadeBoostParams& _params ); const CvCascadeBoostParams& _params );
void markUsedFeaturesInMap( Mat& featureMap ); void markUsedFeaturesInMap( cv::Mat& featureMap );
protected: protected:
virtual bool set_params( const CvBoostParams& _params ); virtual bool set_params( const CvBoostParams& _params );
virtual void update_weights( CvBoostTree* tree ); virtual void update_weights( CvBoostTree* tree );
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include <queue> #include <queue>
using namespace std; using namespace std;
using namespace cv;
static const char* stageTypes[] = { CC_BOOST }; static const char* stageTypes[] = { CC_BOOST };
static const char* featureTypes[] = { CC_HAAR, CC_LBP, CC_HOG }; static const char* featureTypes[] = { CC_HAAR, CC_LBP, CC_HOG };
......
...@@ -72,8 +72,8 @@ public: ...@@ -72,8 +72,8 @@ public:
CvCascadeParams(); CvCascadeParams();
CvCascadeParams( int _stageType, int _featureType ); CvCascadeParams( int _stageType, int _featureType );
void write( FileStorage &fs ) const; void write( cv::FileStorage &fs ) const;
bool read( const FileNode &node ); bool read( const cv::FileNode &node );
void printDefaults() const; void printDefaults() const;
void printAttrs() const; void printAttrs() const;
...@@ -81,7 +81,7 @@ public: ...@@ -81,7 +81,7 @@ public:
int stageType; int stageType;
int featureType; int featureType;
Size winSize; cv::Size winSize;
}; };
class CvCascadeClassifier class CvCascadeClassifier
...@@ -104,20 +104,20 @@ private: ...@@ -104,20 +104,20 @@ private:
bool updateTrainingSet( double& acceptanceRatio ); bool updateTrainingSet( double& acceptanceRatio );
int fillPassedSamples( int first, int count, bool isPositive, int64& consumed ); int fillPassedSamples( int first, int count, bool isPositive, int64& consumed );
void writeParams( FileStorage &fs ) const; void writeParams( cv::FileStorage &fs ) const;
void writeStages( FileStorage &fs, const Mat& featureMap ) const; void writeStages( cv::FileStorage &fs, const cv::Mat& featureMap ) const;
void writeFeatures( FileStorage &fs, const Mat& featureMap ) const; void writeFeatures( cv::FileStorage &fs, const cv::Mat& featureMap ) const;
bool readParams( const FileNode &node ); bool readParams( const cv::FileNode &node );
bool readStages( const FileNode &node ); bool readStages( const cv::FileNode &node );
void getUsedFeaturesIdxMap( Mat& featureMap ); void getUsedFeaturesIdxMap( cv::Mat& featureMap );
CvCascadeParams cascadeParams; CvCascadeParams cascadeParams;
Ptr<CvFeatureParams> featureParams; cv::Ptr<CvFeatureParams> featureParams;
Ptr<CvCascadeBoostParams> stageParams; cv::Ptr<CvCascadeBoostParams> stageParams;
Ptr<CvFeatureEvaluator> featureEvaluator; cv::Ptr<CvFeatureEvaluator> featureEvaluator;
std::vector< Ptr<CvCascadeBoost> > stageClassifiers; std::vector< cv::Ptr<CvCascadeBoost> > stageClassifiers;
CvCascadeImageReader imgReader; CvCascadeImageReader imgReader;
int numStages, curNumSamples; int numStages, curNumSamples;
int numPos, numNeg; int numPos, numNeg;
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "cascadeclassifier.h" #include "cascadeclassifier.h"
using namespace std; using namespace std;
using namespace cv;
float calcNormFactor( const Mat& sum, const Mat& sqSum ) float calcNormFactor( const Mat& sum, const Mat& sqSum )
{ {
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "cascadeclassifier.h" #include "cascadeclassifier.h"
using namespace std; using namespace std;
using namespace cv;
CvHaarFeatureParams::CvHaarFeatureParams() : mode(BASIC) CvHaarFeatureParams::CvHaarFeatureParams() : mode(BASIC)
{ {
......
...@@ -18,8 +18,8 @@ public: ...@@ -18,8 +18,8 @@ public:
CvHaarFeatureParams( int _mode ); CvHaarFeatureParams( int _mode );
virtual void init( const CvFeatureParams& fp ); virtual void init( const CvFeatureParams& fp );
virtual void write( FileStorage &fs ) const; virtual void write( cv::FileStorage &fs ) const;
virtual bool read( const FileNode &node ); virtual bool read( const cv::FileNode &node );
virtual void printDefaults() const; virtual void printDefaults() const;
virtual void printAttrs() const; virtual void printAttrs() const;
...@@ -32,11 +32,11 @@ class CvHaarEvaluator : public CvFeatureEvaluator ...@@ -32,11 +32,11 @@ class CvHaarEvaluator : public CvFeatureEvaluator
{ {
public: public:
virtual void init(const CvFeatureParams *_featureParams, virtual void init(const CvFeatureParams *_featureParams,
int _maxSampleCount, Size _winSize ); int _maxSampleCount, cv::Size _winSize );
virtual void setImage(const Mat& img, uchar clsLabel, int idx); virtual void setImage(const cv::Mat& img, uchar clsLabel, int idx);
virtual float operator()(int featureIdx, int sampleIdx) const; virtual float operator()(int featureIdx, int sampleIdx) const;
virtual void writeFeatures( FileStorage &fs, const Mat& featureMap ) const; virtual void writeFeatures( cv::FileStorage &fs, const cv::Mat& featureMap ) const;
void writeFeature( FileStorage &fs, int fi ) const; // for old file fornat void writeFeature( cv::FileStorage &fs, int fi ) const; // for old file fornat
protected: protected:
virtual void generateFeatures(); virtual void generateFeatures();
...@@ -48,13 +48,13 @@ protected: ...@@ -48,13 +48,13 @@ protected:
int x0, int y0, int w0, int h0, float wt0, int x0, int y0, int w0, int h0, float wt0,
int x1, int y1, int w1, int h1, float wt1, int x1, int y1, int w1, int h1, float wt1,
int x2 = 0, int y2 = 0, int w2 = 0, int h2 = 0, float wt2 = 0.0F ); int x2 = 0, int y2 = 0, int w2 = 0, int h2 = 0, float wt2 = 0.0F );
float calc( const Mat &sum, const Mat &tilted, size_t y) const; float calc( const cv::Mat &sum, const cv::Mat &tilted, size_t y) const;
void write( FileStorage &fs ) const; void write( cv::FileStorage &fs ) const;
bool tilted; bool tilted;
struct struct
{ {
Rect r; cv::Rect r;
float weight; float weight;
} rect[CV_HAAR_FEATURE_MAX]; } rect[CV_HAAR_FEATURE_MAX];
...@@ -65,9 +65,9 @@ protected: ...@@ -65,9 +65,9 @@ protected:
}; };
std::vector<Feature> features; std::vector<Feature> features;
Mat sum; /* sum images (each row represents image) */ cv::Mat sum; /* sum images (each row represents image) */
Mat tilted; /* tilted sum images (each row represents image) */ cv::Mat tilted; /* tilted sum images (each row represents image) */
Mat normfactor; /* normalization factor */ cv::Mat normfactor; /* normalization factor */
}; };
inline float CvHaarEvaluator::operator()(int featureIdx, int sampleIdx) const inline float CvHaarEvaluator::operator()(int featureIdx, int sampleIdx) const
...@@ -76,7 +76,7 @@ inline float CvHaarEvaluator::operator()(int featureIdx, int sampleIdx) const ...@@ -76,7 +76,7 @@ inline float CvHaarEvaluator::operator()(int featureIdx, int sampleIdx) const
return !nf ? 0.0f : (features[featureIdx].calc( sum, tilted, sampleIdx)/nf); return !nf ? 0.0f : (features[featureIdx].calc( sum, tilted, sampleIdx)/nf);
} }
inline float CvHaarEvaluator::Feature::calc( const Mat &_sum, const Mat &_tilted, size_t y) const inline float CvHaarEvaluator::Feature::calc( const cv::Mat &_sum, const cv::Mat &_tilted, size_t y) const
{ {
const int* img = tilted ? _tilted.ptr<int>((int)y) : _sum.ptr<int>((int)y); const int* img = tilted ? _tilted.ptr<int>((int)y) : _sum.ptr<int>((int)y);
float ret = rect[0].weight * (img[fastRect[0].p0] - img[fastRect[0].p1] - img[fastRect[0].p2] + img[fastRect[0].p3] ) + float ret = rect[0].weight * (img[fastRect[0].p0] - img[fastRect[0].p1] - img[fastRect[0].p2] + img[fastRect[0].p3] ) +
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include <fstream> #include <fstream>
using namespace std; using namespace std;
using namespace cv;
bool CvCascadeImageReader::create( const string _posFilename, const string _negFilename, Size _winSize ) bool CvCascadeImageReader::create( const string _posFilename, const string _negFilename, Size _winSize )
{ {
......
...@@ -3,15 +3,15 @@ ...@@ -3,15 +3,15 @@
#include "highgui.h" #include "highgui.h"
using namespace cv;
class CvCascadeImageReader class CvCascadeImageReader
{ {
public: public:
bool create( const std::string _posFilename, const std::string _negFilename, Size _winSize ); bool create( const std::string _posFilename, const std::string _negFilename, cv::Size _winSize );
void restart() { posReader.restart(); } void restart() { posReader.restart(); }
bool getNeg(Mat &_img) { return negReader.get( _img ); } bool getNeg(cv::Mat &_img) { return negReader.get( _img ); }
bool getPos(Mat &_img) { return posReader.get( _img ); } bool getPos(cv::Mat &_img) { return posReader.get( _img ); }
private: private:
class PosReader class PosReader
...@@ -20,7 +20,7 @@ private: ...@@ -20,7 +20,7 @@ private:
PosReader(); PosReader();
virtual ~PosReader(); virtual ~PosReader();
bool create( const std::string _filename ); bool create( const std::string _filename );
bool get( Mat &_img ); bool get( cv::Mat &_img );
void restart(); void restart();
short* vec; short* vec;
...@@ -35,18 +35,18 @@ private: ...@@ -35,18 +35,18 @@ private:
{ {
public: public:
NegReader(); NegReader();
bool create( const std::string _filename, Size _winSize ); bool create( const std::string _filename, cv::Size _winSize );
bool get( Mat& _img ); bool get( cv::Mat& _img );
bool nextImg(); bool nextImg();
Mat src, img; cv::Mat src, img;
std::vector<std::string> imgFilenames; std::vector<std::string> imgFilenames;
Point offset, point; cv::Point offset, point;
float scale; float scale;
float scaleFactor; float scaleFactor;
float stepFactor; float stepFactor;
size_t last, round; size_t last, round;
Size winSize; cv::Size winSize;
} negReader; } negReader;
}; };
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
#include "lbpfeatures.h" #include "lbpfeatures.h"
#include "cascadeclassifier.h" #include "cascadeclassifier.h"
using namespace cv;
CvLBPFeatureParams::CvLBPFeatureParams() CvLBPFeatureParams::CvLBPFeatureParams()
{ {
maxCatCount = 256; maxCatCount = 256;
......
...@@ -15,11 +15,11 @@ class CvLBPEvaluator : public CvFeatureEvaluator ...@@ -15,11 +15,11 @@ class CvLBPEvaluator : public CvFeatureEvaluator
public: public:
virtual ~CvLBPEvaluator() {} virtual ~CvLBPEvaluator() {}
virtual void init(const CvFeatureParams *_featureParams, virtual void init(const CvFeatureParams *_featureParams,
int _maxSampleCount, Size _winSize ); int _maxSampleCount, cv::Size _winSize );
virtual void setImage(const Mat& img, uchar clsLabel, int idx); virtual void setImage(const cv::Mat& img, uchar clsLabel, int idx);
virtual float operator()(int featureIdx, int sampleIdx) const virtual float operator()(int featureIdx, int sampleIdx) const
{ return (float)features[featureIdx].calc( sum, sampleIdx); } { return (float)features[featureIdx].calc( sum, sampleIdx); }
virtual void writeFeatures( FileStorage &fs, const Mat& featureMap ) const; virtual void writeFeatures( cv::FileStorage &fs, const cv::Mat& featureMap ) const;
protected: protected:
virtual void generateFeatures(); virtual void generateFeatures();
...@@ -28,18 +28,18 @@ protected: ...@@ -28,18 +28,18 @@ protected:
public: public:
Feature(); Feature();
Feature( int offset, int x, int y, int _block_w, int _block_h ); Feature( int offset, int x, int y, int _block_w, int _block_h );
uchar calc( const Mat& _sum, size_t y ) const; uchar calc( const cv::Mat& _sum, size_t y ) const;
void write( FileStorage &fs ) const; void write( cv::FileStorage &fs ) const;
Rect rect; cv::Rect rect;
int p[16]; int p[16];
}; };
std::vector<Feature> features; std::vector<Feature> features;
Mat sum; cv::Mat sum;
}; };
inline uchar CvLBPEvaluator::Feature::calc(const Mat &_sum, size_t y) const inline uchar CvLBPEvaluator::Feature::calc(const cv::Mat &_sum, size_t y) const
{ {
const int* psum = _sum.ptr<int>((int)y); const int* psum = _sum.ptr<int>((int)y);
int cval = psum[p[5]] - psum[p[6]] - psum[p[9]] + psum[p[10]]; int cval = psum[p[5]] - psum[p[6]] - psum[p[9]] + psum[p[10]];
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "cascadeclassifier.h" #include "cascadeclassifier.h"
using namespace std; using namespace std;
using namespace cv;
int main( int argc, char* argv[] ) int main( int argc, char* argv[] )
{ {
......
...@@ -30,13 +30,13 @@ ...@@ -30,13 +30,13 @@
(p3) = (rect).x + (rect).width - (rect).height \ (p3) = (rect).x + (rect).width - (rect).height \
+ (step) * ((rect).y + (rect).width + (rect).height); + (step) * ((rect).y + (rect).width + (rect).height);
float calcNormFactor( const Mat& sum, const Mat& sqSum ); float calcNormFactor( const cv::Mat& sum, const cv::Mat& sqSum );
template<class Feature> template<class Feature>
void _writeFeatures( const std::vector<Feature> features, FileStorage &fs, const Mat& featureMap ) void _writeFeatures( const std::vector<Feature> features, cv::FileStorage &fs, const cv::Mat& featureMap )
{ {
fs << FEATURES << "["; fs << FEATURES << "[";
const Mat_<int>& featureMap_ = (const Mat_<int>&)featureMap; const cv::Mat_<int>& featureMap_ = (const cv::Mat_<int>&)featureMap;
for ( int fi = 0; fi < featureMap.cols; fi++ ) for ( int fi = 0; fi < featureMap.cols; fi++ )
if ( featureMap_(0, fi) >= 0 ) if ( featureMap_(0, fi) >= 0 )
{ {
...@@ -53,8 +53,8 @@ public: ...@@ -53,8 +53,8 @@ public:
CvParams(); CvParams();
virtual ~CvParams() {} virtual ~CvParams() {}
// from|to file // from|to file
virtual void write( FileStorage &fs ) const = 0; virtual void write( cv::FileStorage &fs ) const = 0;
virtual bool read( const FileNode &node ) = 0; virtual bool read( const cv::FileNode &node ) = 0;
// from|to screen // from|to screen
virtual void printDefaults() const; virtual void printDefaults() const;
virtual void printAttrs() const; virtual void printAttrs() const;
...@@ -68,9 +68,9 @@ public: ...@@ -68,9 +68,9 @@ public:
enum { HAAR = 0, LBP = 1, HOG = 2 }; enum { HAAR = 0, LBP = 1, HOG = 2 };
CvFeatureParams(); CvFeatureParams();
virtual void init( const CvFeatureParams& fp ); virtual void init( const CvFeatureParams& fp );
virtual void write( FileStorage &fs ) const; virtual void write( cv::FileStorage &fs ) const;
virtual bool read( const FileNode &node ); virtual bool read( const cv::FileNode &node );
static Ptr<CvFeatureParams> create( int featureType ); static cv::Ptr<CvFeatureParams> create( int featureType );
int maxCatCount; // 0 in case of numerical features int maxCatCount; // 0 in case of numerical features
int featSize; // 1 in case of simple features (HAAR, LBP) and N_BINS(9)*N_CELLS(4) in case of Dalal's HOG features int featSize; // 1 in case of simple features (HAAR, LBP) and N_BINS(9)*N_CELLS(4) in case of Dalal's HOG features
}; };
...@@ -80,25 +80,25 @@ class CvFeatureEvaluator ...@@ -80,25 +80,25 @@ class CvFeatureEvaluator
public: public:
virtual ~CvFeatureEvaluator() {} virtual ~CvFeatureEvaluator() {}
virtual void init(const CvFeatureParams *_featureParams, virtual void init(const CvFeatureParams *_featureParams,
int _maxSampleCount, Size _winSize ); int _maxSampleCount, cv::Size _winSize );
virtual void setImage(const Mat& img, uchar clsLabel, int idx); virtual void setImage(const cv::Mat& img, uchar clsLabel, int idx);
virtual void writeFeatures( FileStorage &fs, const Mat& featureMap ) const = 0; virtual void writeFeatures( cv::FileStorage &fs, const cv::Mat& featureMap ) const = 0;
virtual float operator()(int featureIdx, int sampleIdx) const = 0; virtual float operator()(int featureIdx, int sampleIdx) const = 0;
static Ptr<CvFeatureEvaluator> create(int type); static cv::Ptr<CvFeatureEvaluator> create(int type);
int getNumFeatures() const { return numFeatures; } int getNumFeatures() const { return numFeatures; }
int getMaxCatCount() const { return featureParams->maxCatCount; } int getMaxCatCount() const { return featureParams->maxCatCount; }
int getFeatureSize() const { return featureParams->featSize; } int getFeatureSize() const { return featureParams->featSize; }
const Mat& getCls() const { return cls; } const cv::Mat& getCls() const { return cls; }
float getCls(int si) const { return cls.at<float>(si, 0); } float getCls(int si) const { return cls.at<float>(si, 0); }
protected: protected:
virtual void generateFeatures() = 0; virtual void generateFeatures() = 0;
int npos, nneg; int npos, nneg;
int numFeatures; int numFeatures;
Size winSize; cv::Size winSize;
CvFeatureParams *featureParams; CvFeatureParams *featureParams;
Mat cls; cv::Mat cls;
}; };
#endif #endif
...@@ -105,7 +105,9 @@ public: ...@@ -105,7 +105,9 @@ public:
context(_context), depthGenerator(_depthGenerator), imageGenerator(_imageGenerator), context(_context), depthGenerator(_depthGenerator), imageGenerator(_imageGenerator),
maxBufferSize(_maxBufferSize), isCircleBuffer(_isCircleBuffer), maxTimeDuration(_maxTimeDuration) maxBufferSize(_maxBufferSize), isCircleBuffer(_isCircleBuffer), maxTimeDuration(_maxTimeDuration)
{ {
#ifdef HAVE_TBB
task = 0; task = 0;
#endif
CV_Assert( depthGenerator.IsValid() ); CV_Assert( depthGenerator.IsValid() );
CV_Assert( imageGenerator.IsValid() ); CV_Assert( imageGenerator.IsValid() );
...@@ -150,7 +152,7 @@ public: ...@@ -150,7 +152,7 @@ public:
task = new( tbb::task::allocate_root() ) TBBApproximateSynchronizerTask( *this ); task = new( tbb::task::allocate_root() ) TBBApproximateSynchronizerTask( *this );
tbb::task::enqueue(*task); tbb::task::enqueue(*task);
#else #else
task = new ApproximateSynchronizer( *this ); task->reset( new ApproximateSynchronizer( *this ) );
#endif #endif
} }
...@@ -171,6 +173,9 @@ public: ...@@ -171,6 +173,9 @@ public:
xn::ImageGenerator &imageGenerator; xn::ImageGenerator &imageGenerator;
private: private:
ApproximateSyncGrabber(const ApproximateSyncGrabber&);
ApproximateSyncGrabber& operator=(const ApproximateSyncGrabber&);
int maxBufferSize; int maxBufferSize;
bool isCircleBuffer; bool isCircleBuffer;
int maxTimeDuration; int maxTimeDuration;
...@@ -214,7 +219,7 @@ private: ...@@ -214,7 +219,7 @@ private:
virtual bool grab( xn::DepthMetaData& depthMetaData, virtual bool grab( xn::DepthMetaData& depthMetaData,
xn::ImageMetaData& imageMetaData ) xn::ImageMetaData& imageMetaData )
{ {
while(1) for(;;)
{ {
if( !isDepthFilled ) if( !isDepthFilled )
isDepthFilled = popDepthMetaData(depth); isDepthFilled = popDepthMetaData(depth);
...@@ -951,7 +956,7 @@ double CvCapture_OpenNI::getDepthGeneratorProperty( int propIdx ) ...@@ -951,7 +956,7 @@ double CvCapture_OpenNI::getDepthGeneratorProperty( int propIdx )
propValue = depthGenerator.GetAlternativeViewPointCap().IsViewPointAs(imageGenerator) ? 1.0 : 0.0; propValue = depthGenerator.GetAlternativeViewPointCap().IsViewPointAs(imageGenerator) ? 1.0 : 0.0;
break; break;
case CV_CAP_PROP_POS_MSEC : case CV_CAP_PROP_POS_MSEC :
propValue = depthGenerator.GetTimestamp(); propValue = (double)depthGenerator.GetTimestamp();
break; break;
case CV_CAP_PROP_POS_FRAMES : case CV_CAP_PROP_POS_FRAMES :
propValue = depthGenerator.GetFrameID(); propValue = depthGenerator.GetFrameID();
...@@ -1039,7 +1044,7 @@ double CvCapture_OpenNI::getImageGeneratorProperty( int propIdx ) ...@@ -1039,7 +1044,7 @@ double CvCapture_OpenNI::getImageGeneratorProperty( int propIdx )
propValue = mode.nFPS; propValue = mode.nFPS;
break; break;
case CV_CAP_PROP_POS_MSEC : case CV_CAP_PROP_POS_MSEC :
propValue = imageGenerator.GetTimestamp(); propValue = (double)imageGenerator.GetTimestamp();
break; break;
case CV_CAP_PROP_POS_FRAMES : case CV_CAP_PROP_POS_FRAMES :
propValue = imageGenerator.GetFrameID(); propValue = imageGenerator.GetFrameID();
......
...@@ -43,9 +43,13 @@ ...@@ -43,9 +43,13 @@
#include "precomp.hpp" #include "precomp.hpp"
#include <fstream> #include <fstream>
#ifndef INT32_MAX #if defined _MSC_VER && _MSC_VER == 1500
#define __STDC_LIMIT_MACROS typedef int int_fast32_t;
#include <stdint.h> #else
#ifndef INT32_MAX
#define __STDC_LIMIT_MACROS
#include <stdint.h>
#endif
#endif #endif
using namespace std; using namespace std;
......
...@@ -40,9 +40,6 @@ ...@@ -40,9 +40,6 @@
//M*/ //M*/
#include "test_precomp.hpp" #include "test_precomp.hpp"
#include <string>
#include <algorithm>
#include <fstream>
using namespace cv; using namespace cv;
using namespace std; using namespace std;
......
...@@ -13,5 +13,9 @@ ...@@ -13,5 +13,9 @@
#include "opencv2/ts.hpp" #include "opencv2/ts.hpp"
#include "opencv2/photo.hpp" #include "opencv2/photo.hpp"
#include "opencv2/highgui.hpp" #include "opencv2/highgui.hpp"
#include <string>
#include <algorithm>
#include <fstream>
#include <ctime>
#endif #endif
...@@ -108,10 +108,9 @@ namespace cv ...@@ -108,10 +108,9 @@ namespace cv
void remove(const String &window_name); void remove(const String &window_name);
static VizAccessor * instance_; static VizAccessor * instance_;
static bool is_instantiated_;
struct VizAccessorImpl; struct VizAccessorImpl;
static VizAccessorImpl * impl_; VizAccessorImpl * impl_;
friend class Viz3d; friend class Viz3d;
}; };
......
...@@ -57,7 +57,7 @@ namespace cv ...@@ -57,7 +57,7 @@ namespace cv
{ {
namespace viz namespace viz
{ {
class CV_EXPORTS Color : public Scalar class Color : public Scalar
{ {
public: public:
Color(); Color();
...@@ -169,8 +169,26 @@ namespace cv ...@@ -169,8 +169,26 @@ namespace cv
Vec2f principal_point_; Vec2f principal_point_;
Vec2f focal_; Vec2f focal_;
}; };
} /* namespace viz */ } /* namespace viz */
} /* namespace cv */ } /* namespace cv */
//////////////////////////////////////////////////////////////////////////////////////////////////////
/// cv::viz::Color
inline cv::viz::Color::Color() : Scalar(0, 0, 0) {}
inline cv::viz::Color::Color(double gray) : Scalar(gray, gray, gray) {}
inline cv::viz::Color::Color(double blue, double green, double red) : Scalar(blue, green, red) {}
inline cv::viz::Color::Color(const Scalar& color) : Scalar(color) {}
inline cv::viz::Color cv::viz::Color::black() { return Color( 0, 0, 0); }
inline cv::viz::Color cv::viz::Color::green() { return Color( 0, 255, 0); }
inline cv::viz::Color cv::viz::Color::blue() { return Color(255, 0, 0); }
inline cv::viz::Color cv::viz::Color::cyan() { return Color(255, 255, 0); }
inline cv::viz::Color cv::viz::Color::red() { return Color( 0, 0, 255); }
inline cv::viz::Color cv::viz::Color::yellow() { return Color( 0, 255, 255); }
inline cv::viz::Color cv::viz::Color::magenta() { return Color(255, 0, 255); }
inline cv::viz::Color cv::viz::Color::white() { return Color(255, 255, 255); }
inline cv::viz::Color cv::viz::Color::gray() { return Color(128, 128, 128); }
#endif #endif
...@@ -47,9 +47,6 @@ ...@@ -47,9 +47,6 @@
//M*/ //M*/
#include "precomp.hpp" #include "precomp.hpp"
#include "interactor_style.h"
using namespace cv;
////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////
void cv::viz::InteractorStyle::Initialize() void cv::viz::InteractorStyle::Initialize()
...@@ -78,11 +75,11 @@ void cv::viz::InteractorStyle::Initialize() ...@@ -78,11 +75,11 @@ void cv::viz::InteractorStyle::Initialize()
} }
////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////
void cv::viz::InteractorStyle::saveScreenshot(const std::string &file) void cv::viz::InteractorStyle::saveScreenshot(const String &file)
{ {
FindPokedRenderer(Interactor->GetEventPosition()[0], Interactor->GetEventPosition()[1]); FindPokedRenderer(Interactor->GetEventPosition()[0], Interactor->GetEventPosition()[1]);
wif_->SetInput(Interactor->GetRenderWindow()); wif_->SetInput(Interactor->GetRenderWindow());
wif_->Modified(); // Update the WindowToImageFilter wif_->Modified(); // Update the WindowToImageFilter
snapshot_writer_->Modified(); snapshot_writer_->Modified();
snapshot_writer_->SetFileName(file.c_str()); snapshot_writer_->SetFileName(file.c_str());
snapshot_writer_->Write(); snapshot_writer_->Write();
...@@ -117,30 +114,19 @@ void cv::viz::InteractorStyle::OnChar() ...@@ -117,30 +114,19 @@ void cv::viz::InteractorStyle::OnChar()
FindPokedRenderer(Interactor->GetEventPosition()[0], Interactor->GetEventPosition()[1]); FindPokedRenderer(Interactor->GetEventPosition()[0], Interactor->GetEventPosition()[1]);
if (Interactor->GetKeyCode() >= '0' && Interactor->GetKeyCode() <= '9') if (Interactor->GetKeyCode() >= '0' && Interactor->GetKeyCode() <= '9')
return; return;
std::string key(Interactor->GetKeySym());
if (key.find("XF86ZoomIn") != std::string::npos) String key(Interactor->GetKeySym());
if (key.find("XF86ZoomIn") != String::npos)
zoomIn(); zoomIn();
else if (key.find("XF86ZoomOut") != std::string::npos) else if (key.find("XF86ZoomOut") != String::npos)
zoomOut(); zoomOut();
int keymod = false; int keymod = false;
switch (modifier_) switch (modifier_)
{ {
case KB_MOD_ALT: case KB_MOD_ALT: keymod = Interactor->GetAltKey(); break;
{ case KB_MOD_CTRL: keymod = Interactor->GetControlKey(); break;
keymod = Interactor->GetAltKey(); case KB_MOD_SHIFT: keymod = Interactor->GetShiftKey(); break;
break;
}
case KB_MOD_CTRL:
{
keymod = Interactor->GetControlKey();
break;
}
case KB_MOD_SHIFT:
{
keymod = Interactor->GetShiftKey();
break;
}
} }
switch (Interactor->GetKeyCode()) switch (Interactor->GetKeyCode())
...@@ -193,11 +179,15 @@ void cv::viz::InteractorStyle::registerKeyboardCallback(void (*callback)(const K ...@@ -193,11 +179,15 @@ void cv::viz::InteractorStyle::registerKeyboardCallback(void (*callback)(const K
keyboard_callback_cookie_ = cookie; keyboard_callback_cookie_ = cookie;
} }
//////////////////////////////////////////////////////////////////////////////////////////////
bool cv::viz::InteractorStyle::getAltKey() { return Interactor->GetAltKey() != 0; }
bool cv::viz::InteractorStyle::getShiftKey() { return Interactor->GetShiftKey()!= 0; }
bool cv::viz::InteractorStyle::getControlKey() { return Interactor->GetControlKey()!= 0; }
////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////
void void
cv::viz::InteractorStyle::OnKeyDown() cv::viz::InteractorStyle::OnKeyDown()
{ {
CV_Assert("Interactor style not initialized. Please call Initialize() before continuing" && init_); CV_Assert("Interactor style not initialized. Please call Initialize() before continuing" && init_);
CV_Assert("No renderer given! Use SetRendererCollection() before continuing." && renderer_); CV_Assert("No renderer given! Use SetRendererCollection() before continuing." && renderer_);
...@@ -216,9 +206,9 @@ cv::viz::InteractorStyle::OnKeyDown() ...@@ -216,9 +206,9 @@ cv::viz::InteractorStyle::OnKeyDown()
// Get the status of special keys (Cltr+Alt+Shift) // Get the status of special keys (Cltr+Alt+Shift)
bool shift = Interactor->GetShiftKey(); bool shift = getShiftKey();
bool ctrl = Interactor->GetControlKey(); bool ctrl = getControlKey();
bool alt = Interactor->GetAltKey(); bool alt = getAltKey();
bool keymod = false; bool keymod = false;
switch (modifier_) switch (modifier_)
...@@ -269,42 +259,40 @@ cv::viz::InteractorStyle::OnKeyDown() ...@@ -269,42 +259,40 @@ cv::viz::InteractorStyle::OnKeyDown()
vtkSmartPointer<vtkActorCollection> ac = CurrentRenderer->GetActors(); vtkSmartPointer<vtkActorCollection> ac = CurrentRenderer->GetActors();
vtkCollectionSimpleIterator ait; vtkCollectionSimpleIterator ait;
for (ac->InitTraversal(ait); vtkActor* actor = ac->GetNextActor(ait); ) for (ac->InitTraversal(ait); vtkActor* actor = ac->GetNextActor(ait); )
{
for (actor->InitPathTraversal(); vtkAssemblyPath* path = actor->GetNextPath(); ) for (actor->InitPathTraversal(); vtkAssemblyPath* path = actor->GetNextPath(); )
{ {
vtkActor* apart = reinterpret_cast <vtkActor*>(path->GetLastNode()->GetViewProp()); vtkActor* apart = reinterpret_cast <vtkActor*>(path->GetLastNode()->GetViewProp());
apart->GetProperty()->SetRepresentationToPoints(); apart->GetProperty()->SetRepresentationToPoints();
} }
}
break; break;
} }
// Save a PNG snapshot with the current screen // Save a PNG snapshot with the current screen
case 'j': case 'J': case 'j': case 'J':
{ {
char cam_fn[80], snapshot_fn[80]; unsigned int t = static_cast<unsigned int>(time(0));
unsigned t = static_cast<unsigned>(time(0)); String png_file = cv::format("screenshot-%d.png", t);
sprintf(snapshot_fn, "screenshot-%d.png" , t); String cam_file = cv::format("screenshot-%d.cam", t);
saveScreenshot(snapshot_fn);
sprintf(cam_fn, "screenshot-%d.cam", t);
ofstream ofs_cam;
ofs_cam.open(cam_fn);
vtkSmartPointer<vtkCamera> cam = Interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer()->GetActiveCamera(); vtkSmartPointer<vtkCamera> cam = Interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer()->GetActiveCamera();
double clip[2], focal[3], pos[3], view[3]; Vec2d clip;
cam->GetClippingRange(clip); Vec3d focal, pos, view;
cam->GetFocalPoint(focal); cam->GetClippingRange(clip.val);
cam->GetPosition(pos); cam->GetFocalPoint(focal.val);
cam->GetViewUp(view); cam->GetPosition(pos.val);
cam->GetViewUp(view.val);
int *win_pos = Interactor->GetRenderWindow()->GetPosition(); Vec2i win_pos(Interactor->GetRenderWindow()->GetPosition());
int *win_size = Interactor->GetRenderWindow()->GetSize(); Vec2i win_size(Interactor->GetRenderWindow()->GetSize());
ofs_cam << clip[0] << "," << clip[1] << "/" << focal[0] << "," << focal[1] << "," << focal[2] << "/" << double angle = cam->GetViewAngle() / 180.0 * CV_PI;
pos[0] << "," << pos[1] << "," << pos[2] << "/" << view[0] << "," << view[1] << "," << view[2] << "/" <<
cam->GetViewAngle() / 180.0 * CV_PI << "/" << win_size[0] << "," << win_size[1] << "/" << win_pos[0] << "," << win_pos[1] String data = cv::format("%f,%f/%f,%f,%f/%f,%f,%f/%f,%f,%f/%f/%d,%d/%d,%d", clip[0],clip[1], focal[0],focal[1],focal[2],
<< endl; pos[0],pos[1],pos[2], view[0],view[1], view[2], angle , win_size[0],win_size[1], win_pos[0], win_pos[1]);
saveScreenshot(png_file);
ofstream ofs_cam(cam_file.c_str());
ofs_cam << data.c_str() << endl;
ofs_cam.close(); ofs_cam.close();
std::cout << "Screenshot (" << snapshot_fn << ") and camera information (" << cam_fn << ") successfully captured." << std::endl; cout << "Screenshot (" << png_file.c_str() << ") and camera information (" << cam_file.c_str() << ") successfully captured." << endl;
break; break;
} }
// display current camera settings/parameters // display current camera settings/parameters
...@@ -349,7 +337,6 @@ cv::viz::InteractorStyle::OnKeyDown() ...@@ -349,7 +337,6 @@ cv::viz::InteractorStyle::OnKeyDown()
vtkSmartPointer<vtkActorCollection> ac = CurrentRenderer->GetActors(); vtkSmartPointer<vtkActorCollection> ac = CurrentRenderer->GetActors();
vtkCollectionSimpleIterator ait; vtkCollectionSimpleIterator ait;
for (ac->InitTraversal(ait); vtkActor* actor = ac->GetNextActor(ait); ) for (ac->InitTraversal(ait); vtkActor* actor = ac->GetNextActor(ait); )
{
for (actor->InitPathTraversal(); vtkAssemblyPath* path = actor->GetNextPath(); ) for (actor->InitPathTraversal(); vtkAssemblyPath* path = actor->GetNextPath(); )
{ {
vtkActor* apart = reinterpret_cast <vtkActor*>(path->GetLastNode()->GetViewProp()); vtkActor* apart = reinterpret_cast <vtkActor*>(path->GetLastNode()->GetViewProp());
...@@ -357,7 +344,6 @@ cv::viz::InteractorStyle::OnKeyDown() ...@@ -357,7 +344,6 @@ cv::viz::InteractorStyle::OnKeyDown()
if (psize < 63.0f) if (psize < 63.0f)
apart->GetProperty()->SetPointSize(psize + 1.0f); apart->GetProperty()->SetPointSize(psize + 1.0f);
} }
}
} }
break; break;
} }
...@@ -370,7 +356,6 @@ cv::viz::InteractorStyle::OnKeyDown() ...@@ -370,7 +356,6 @@ cv::viz::InteractorStyle::OnKeyDown()
vtkSmartPointer<vtkActorCollection> ac = CurrentRenderer->GetActors(); vtkSmartPointer<vtkActorCollection> ac = CurrentRenderer->GetActors();
vtkCollectionSimpleIterator ait; vtkCollectionSimpleIterator ait;
for (ac->InitTraversal(ait); vtkActor* actor = ac->GetNextActor(ait); ) for (ac->InitTraversal(ait); vtkActor* actor = ac->GetNextActor(ait); )
{
for (actor->InitPathTraversal(); vtkAssemblyPath* path = actor->GetNextPath(); ) for (actor->InitPathTraversal(); vtkAssemblyPath* path = actor->GetNextPath(); )
{ {
vtkActor* apart = static_cast<vtkActor*>(path->GetLastNode()->GetViewProp()); vtkActor* apart = static_cast<vtkActor*>(path->GetLastNode()->GetViewProp());
...@@ -378,7 +363,6 @@ cv::viz::InteractorStyle::OnKeyDown() ...@@ -378,7 +363,6 @@ cv::viz::InteractorStyle::OnKeyDown()
if (psize > 1.0f) if (psize > 1.0f)
apart->GetProperty()->SetPointSize(psize - 1.0f); apart->GetProperty()->SetPointSize(psize - 1.0f);
} }
}
} }
break; break;
} }
...@@ -455,9 +439,7 @@ cv::viz::InteractorStyle::OnKeyDown() ...@@ -455,9 +439,7 @@ cv::viz::InteractorStyle::OnKeyDown()
case 'o': case 'O': case 'o': case 'O':
{ {
vtkSmartPointer<vtkCamera> cam = CurrentRenderer->GetActiveCamera(); vtkSmartPointer<vtkCamera> cam = CurrentRenderer->GetActiveCamera();
int flag = cam->GetParallelProjection(); cam->SetParallelProjection(!cam->GetParallelProjection());
cam->SetParallelProjection(!flag);
CurrentRenderer->SetActiveCamera(cam); CurrentRenderer->SetActiveCamera(cam);
CurrentRenderer->Render(); CurrentRenderer->Render();
break; break;
...@@ -494,18 +476,14 @@ cv::viz::InteractorStyle::OnKeyDown() ...@@ -494,18 +476,14 @@ cv::viz::InteractorStyle::OnKeyDown()
// if a valid transformation was found, use it otherwise fall back to default view point. // if a valid transformation was found, use it otherwise fall back to default view point.
if (found_transformation) if (found_transformation)
{ {
vtkProp3D * actor = vtkProp3D::SafeDownCast(it->second); const vtkMatrix4x4* m = vtkProp3D::SafeDownCast(it->second)->GetUserMatrix();
cam->SetPosition(actor->GetUserMatrix()->GetElement(0, 3),
actor->GetUserMatrix()->GetElement(1, 3),
actor->GetUserMatrix()->GetElement(2, 3));
cam->SetFocalPoint(actor->GetUserMatrix()->GetElement(0, 3) - actor->GetUserMatrix()->GetElement(0, 2), cam->SetFocalPoint(m->GetElement(0, 3) - m->GetElement(0, 2),
actor->GetUserMatrix()->GetElement(1, 3) - actor->GetUserMatrix()->GetElement(1, 2), m->GetElement(1, 3) - m->GetElement(1, 2),
actor->GetUserMatrix()->GetElement(2, 3) - actor->GetUserMatrix()->GetElement(2, 2)); m->GetElement(2, 3) - m->GetElement(2, 2));
cam->SetViewUp(actor->GetUserMatrix()->GetElement(0, 1), cam->SetViewUp (m->GetElement(0, 1), m->GetElement(1, 1), m->GetElement(2, 1));
actor->GetUserMatrix()->GetElement(1, 1), cam->SetPosition(m->GetElement(0, 3), m->GetElement(1, 3), m->GetElement(2, 3));
actor->GetUserMatrix()->GetElement(2, 1));
} }
else else
{ {
...@@ -538,7 +516,7 @@ cv::viz::InteractorStyle::OnKeyDown() ...@@ -538,7 +516,7 @@ cv::viz::InteractorStyle::OnKeyDown()
} }
} }
KeyboardEvent event(true, Interactor->GetKeySym(), Interactor->GetKeyCode(), Interactor->GetAltKey(), Interactor->GetControlKey(), Interactor->GetShiftKey()); KeyboardEvent event(true, Interactor->GetKeySym(), Interactor->GetKeyCode(), getAltKey(), getControlKey(), getShiftKey());
// Check if there is a keyboard callback registered // Check if there is a keyboard callback registered
if (keyboardCallback_) if (keyboardCallback_)
keyboardCallback_(event, keyboard_callback_cookie_); keyboardCallback_(event, keyboard_callback_cookie_);
...@@ -550,7 +528,7 @@ cv::viz::InteractorStyle::OnKeyDown() ...@@ -550,7 +528,7 @@ cv::viz::InteractorStyle::OnKeyDown()
////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////
void cv::viz::InteractorStyle::OnKeyUp() void cv::viz::InteractorStyle::OnKeyUp()
{ {
KeyboardEvent event(false, Interactor->GetKeySym(), Interactor->GetKeyCode(), Interactor->GetAltKey(), Interactor->GetControlKey(), Interactor->GetShiftKey()); KeyboardEvent event(false, Interactor->GetKeySym(), Interactor->GetKeyCode(), getAltKey(), getControlKey(), getShiftKey());
// Check if there is a keyboard callback registered // Check if there is a keyboard callback registered
if (keyboardCallback_) if (keyboardCallback_)
keyboardCallback_(event, keyboard_callback_cookie_); keyboardCallback_(event, keyboard_callback_cookie_);
...@@ -562,7 +540,7 @@ void cv::viz::InteractorStyle::OnKeyUp() ...@@ -562,7 +540,7 @@ void cv::viz::InteractorStyle::OnKeyUp()
void cv::viz::InteractorStyle::OnMouseMove() void cv::viz::InteractorStyle::OnMouseMove()
{ {
Vec2i p(Interactor->GetEventPosition()); Vec2i p(Interactor->GetEventPosition());
MouseEvent event(MouseEvent::MouseMove, MouseEvent::NoButton, p, Interactor->GetAltKey(), Interactor->GetControlKey(), Interactor->GetShiftKey()); MouseEvent event(MouseEvent::MouseMove, MouseEvent::NoButton, p, getAltKey(), getControlKey(), getShiftKey());
if (mouseCallback_) if (mouseCallback_)
mouseCallback_(event, mouse_callback_cookie_); mouseCallback_(event, mouse_callback_cookie_);
Superclass::OnMouseMove(); Superclass::OnMouseMove();
...@@ -573,7 +551,7 @@ void cv::viz::InteractorStyle::OnLeftButtonDown() ...@@ -573,7 +551,7 @@ void cv::viz::InteractorStyle::OnLeftButtonDown()
{ {
Vec2i p(Interactor->GetEventPosition()); Vec2i p(Interactor->GetEventPosition());
MouseEvent::Type type = (Interactor->GetRepeatCount() == 0) ? MouseEvent::MouseButtonPress : MouseEvent::MouseDblClick; MouseEvent::Type type = (Interactor->GetRepeatCount() == 0) ? MouseEvent::MouseButtonPress : MouseEvent::MouseDblClick;
MouseEvent event(type, MouseEvent::LeftButton, p, Interactor->GetAltKey(), Interactor->GetControlKey(), Interactor->GetShiftKey()); MouseEvent event(type, MouseEvent::LeftButton, p, getAltKey(), getControlKey(), getShiftKey());
if (mouseCallback_) if (mouseCallback_)
mouseCallback_(event, mouse_callback_cookie_); mouseCallback_(event, mouse_callback_cookie_);
Superclass::OnLeftButtonDown(); Superclass::OnLeftButtonDown();
...@@ -583,7 +561,7 @@ void cv::viz::InteractorStyle::OnLeftButtonDown() ...@@ -583,7 +561,7 @@ void cv::viz::InteractorStyle::OnLeftButtonDown()
void cv::viz::InteractorStyle::OnLeftButtonUp() void cv::viz::InteractorStyle::OnLeftButtonUp()
{ {
Vec2i p(Interactor->GetEventPosition()); Vec2i p(Interactor->GetEventPosition());
MouseEvent event(MouseEvent::MouseButtonRelease, MouseEvent::LeftButton, p, Interactor->GetAltKey(), Interactor->GetControlKey(), Interactor->GetShiftKey()); MouseEvent event(MouseEvent::MouseButtonRelease, MouseEvent::LeftButton, p, getAltKey(), getControlKey(), getShiftKey());
if (mouseCallback_) if (mouseCallback_)
mouseCallback_(event, mouse_callback_cookie_); mouseCallback_(event, mouse_callback_cookie_);
Superclass::OnLeftButtonUp(); Superclass::OnLeftButtonUp();
...@@ -595,7 +573,7 @@ void cv::viz::InteractorStyle::OnMiddleButtonDown() ...@@ -595,7 +573,7 @@ void cv::viz::InteractorStyle::OnMiddleButtonDown()
Vec2i p(Interactor->GetEventPosition()); Vec2i p(Interactor->GetEventPosition());
MouseEvent::Type type = (Interactor->GetRepeatCount() == 0) ? MouseEvent::MouseButtonPress : MouseEvent::MouseDblClick; MouseEvent::Type type = (Interactor->GetRepeatCount() == 0) ? MouseEvent::MouseButtonPress : MouseEvent::MouseDblClick;
MouseEvent event(type, MouseEvent::MiddleButton, p, Interactor->GetAltKey(), Interactor->GetControlKey(), Interactor->GetShiftKey()); MouseEvent event(type, MouseEvent::MiddleButton, p, getAltKey(), getControlKey(), getShiftKey());
if (mouseCallback_) if (mouseCallback_)
mouseCallback_(event, mouse_callback_cookie_); mouseCallback_(event, mouse_callback_cookie_);
Superclass::OnMiddleButtonDown(); Superclass::OnMiddleButtonDown();
...@@ -605,7 +583,7 @@ void cv::viz::InteractorStyle::OnMiddleButtonDown() ...@@ -605,7 +583,7 @@ void cv::viz::InteractorStyle::OnMiddleButtonDown()
void cv::viz::InteractorStyle::OnMiddleButtonUp() void cv::viz::InteractorStyle::OnMiddleButtonUp()
{ {
Vec2i p(Interactor->GetEventPosition()); Vec2i p(Interactor->GetEventPosition());
MouseEvent event(MouseEvent::MouseButtonRelease, MouseEvent::MiddleButton, p, Interactor->GetAltKey(), Interactor->GetControlKey(), Interactor->GetShiftKey()); MouseEvent event(MouseEvent::MouseButtonRelease, MouseEvent::MiddleButton, p, getAltKey(), getControlKey(), getShiftKey());
if (mouseCallback_) if (mouseCallback_)
mouseCallback_(event, mouse_callback_cookie_); mouseCallback_(event, mouse_callback_cookie_);
Superclass::OnMiddleButtonUp(); Superclass::OnMiddleButtonUp();
...@@ -617,7 +595,7 @@ void cv::viz::InteractorStyle::OnRightButtonDown() ...@@ -617,7 +595,7 @@ void cv::viz::InteractorStyle::OnRightButtonDown()
Vec2i p(Interactor->GetEventPosition()); Vec2i p(Interactor->GetEventPosition());
MouseEvent::Type type = (Interactor->GetRepeatCount() == 0) ? MouseEvent::MouseButtonPress : MouseEvent::MouseDblClick; MouseEvent::Type type = (Interactor->GetRepeatCount() == 0) ? MouseEvent::MouseButtonPress : MouseEvent::MouseDblClick;
MouseEvent event(type, MouseEvent::RightButton, p, Interactor->GetAltKey(), Interactor->GetControlKey(), Interactor->GetShiftKey()); MouseEvent event(type, MouseEvent::RightButton, p, getAltKey(), getControlKey(), getShiftKey());
if (mouseCallback_) if (mouseCallback_)
mouseCallback_(event, mouse_callback_cookie_); mouseCallback_(event, mouse_callback_cookie_);
Superclass::OnRightButtonDown(); Superclass::OnRightButtonDown();
...@@ -627,7 +605,7 @@ void cv::viz::InteractorStyle::OnRightButtonDown() ...@@ -627,7 +605,7 @@ void cv::viz::InteractorStyle::OnRightButtonDown()
void cv::viz::InteractorStyle::OnRightButtonUp() void cv::viz::InteractorStyle::OnRightButtonUp()
{ {
Vec2i p(Interactor->GetEventPosition()); Vec2i p(Interactor->GetEventPosition());
MouseEvent event(MouseEvent::MouseButtonRelease, MouseEvent::RightButton, p, Interactor->GetAltKey(), Interactor->GetControlKey(), Interactor->GetShiftKey()); MouseEvent event(MouseEvent::MouseButtonRelease, MouseEvent::RightButton, p, getAltKey(), getControlKey(), getShiftKey());
if (mouseCallback_) if (mouseCallback_)
mouseCallback_(event, mouse_callback_cookie_); mouseCallback_(event, mouse_callback_cookie_);
Superclass::OnRightButtonUp(); Superclass::OnRightButtonUp();
...@@ -637,7 +615,7 @@ void cv::viz::InteractorStyle::OnRightButtonUp() ...@@ -637,7 +615,7 @@ void cv::viz::InteractorStyle::OnRightButtonUp()
void cv::viz::InteractorStyle::OnMouseWheelForward() void cv::viz::InteractorStyle::OnMouseWheelForward()
{ {
Vec2i p(Interactor->GetEventPosition()); Vec2i p(Interactor->GetEventPosition());
MouseEvent event(MouseEvent::MouseScrollUp, MouseEvent::VScroll, p, Interactor->GetAltKey(), Interactor->GetControlKey(), Interactor->GetShiftKey()); MouseEvent event(MouseEvent::MouseScrollUp, MouseEvent::VScroll, p, getAltKey(), getControlKey(), getShiftKey());
// If a mouse callback registered, call it! // If a mouse callback registered, call it!
if (mouseCallback_) if (mouseCallback_)
mouseCallback_(event, mouse_callback_cookie_); mouseCallback_(event, mouse_callback_cookie_);
...@@ -669,7 +647,7 @@ void cv::viz::InteractorStyle::OnMouseWheelForward() ...@@ -669,7 +647,7 @@ void cv::viz::InteractorStyle::OnMouseWheelForward()
void cv::viz::InteractorStyle::OnMouseWheelBackward() void cv::viz::InteractorStyle::OnMouseWheelBackward()
{ {
Vec2i p(Interactor->GetEventPosition()); Vec2i p(Interactor->GetEventPosition());
MouseEvent event(MouseEvent::MouseScrollDown, MouseEvent::VScroll, p, Interactor->GetAltKey(), Interactor->GetControlKey(), Interactor->GetShiftKey()); MouseEvent event(MouseEvent::MouseScrollDown, MouseEvent::VScroll, p, getAltKey(), getControlKey(), getShiftKey());
// If a mouse callback registered, call it! // If a mouse callback registered, call it!
if (mouseCallback_) if (mouseCallback_)
mouseCallback_(event, mouse_callback_cookie_); mouseCallback_(event, mouse_callback_cookie_);
...@@ -707,11 +685,8 @@ void cv::viz::InteractorStyle::OnTimer() ...@@ -707,11 +685,8 @@ void cv::viz::InteractorStyle::OnTimer()
Interactor->Render(); Interactor->Render();
} }
namespace cv namespace cv { namespace viz
{ {
namespace viz //Standard VTK macro for *New()
{ vtkStandardNewMacro(InteractorStyle)
//Standard VTK macro for *New() }}
vtkStandardNewMacro(InteractorStyle)
}
}
...@@ -49,8 +49,6 @@ ...@@ -49,8 +49,6 @@
#ifndef __OPENCV_VIZ_INTERACTOR_STYLE_H__ #ifndef __OPENCV_VIZ_INTERACTOR_STYLE_H__
#define __OPENCV_VIZ_INTERACTOR_STYLE_H__ #define __OPENCV_VIZ_INTERACTOR_STYLE_H__
#include <opencv2/viz/types.hpp>
namespace cv namespace cv
{ {
namespace viz namespace viz
...@@ -59,16 +57,9 @@ namespace cv ...@@ -59,16 +57,9 @@ namespace cv
{ {
public: public:
enum KeyboardModifier enum KeyboardModifier { KB_MOD_ALT, KB_MOD_CTRL, KB_MOD_SHIFT };
{
KB_MOD_ALT,
KB_MOD_CTRL,
KB_MOD_SHIFT
};
static InteractorStyle *New(); static InteractorStyle *New();
InteractorStyle() {}
virtual ~InteractorStyle() {} virtual ~InteractorStyle() {}
// this macro defines Superclass, the isA functionality and the safe downcast method // this macro defines Superclass, the isA functionality and the safe downcast method
...@@ -77,32 +68,24 @@ namespace cv ...@@ -77,32 +68,24 @@ namespace cv
/** \brief Initialization routine. Must be called before anything else. */ /** \brief Initialization routine. Must be called before anything else. */
virtual void Initialize(); virtual void Initialize();
inline void setWidgetActorMap(const Ptr<WidgetActorMap>& actors) { widget_actor_map_ = actors; } void setWidgetActorMap(const Ptr<WidgetActorMap>& actors) { widget_actor_map_ = actors; }
void setRenderer(vtkSmartPointer<vtkRenderer>& ren) { renderer_ = ren; } void setRenderer(vtkSmartPointer<vtkRenderer>& ren) { renderer_ = ren; }
void registerMouseCallback(void (*callback)(const MouseEvent&, void*), void* cookie = 0); void registerMouseCallback(void (*callback)(const MouseEvent&, void*), void* cookie = 0);
void registerKeyboardCallback(void (*callback)(const KeyboardEvent&, void*), void * cookie = 0); void registerKeyboardCallback(void (*callback)(const KeyboardEvent&, void*), void * cookie = 0);
void saveScreenshot(const std::string &file); void saveScreenshot(const String &file);
/** \brief Change the default keyboard modified from ALT to a different special key.*/ /** \brief Change the default keyboard modified from ALT to a different special key.*/
inline void setKeyboardModifier(const KeyboardModifier &modifier) { modifier_ = modifier; } inline void setKeyboardModifier(const KeyboardModifier &modifier) { modifier_ = modifier; }
protected: private:
/** \brief Set to true after initialization is complete. */ /** \brief Set to true after initialization is complete. */
bool init_; bool init_;
/** \brief Collection of vtkRenderers stored internally. */
vtkSmartPointer<vtkRenderer> renderer_; vtkSmartPointer<vtkRenderer> renderer_;
Ptr<WidgetActorMap> widget_actor_map_;
/** \brief Actor map stored internally. */
cv::Ptr<WidgetActorMap> widget_actor_map_;
/** \brief The current window width/height. */
Vec2i win_size_; Vec2i win_size_;
/** \brief The current window position x/y. */
Vec2i win_pos_; Vec2i win_pos_;
/** \brief The maximum resizeable window width/height. */
Vec2i max_win_size_; Vec2i max_win_size_;
/** \brief A PNG writer for screenshot captures. */ /** \brief A PNG writer for screenshot captures. */
...@@ -145,6 +128,10 @@ namespace cv ...@@ -145,6 +128,10 @@ namespace cv
void (*mouseCallback_)(const MouseEvent&, void*); void (*mouseCallback_)(const MouseEvent&, void*);
void *mouse_callback_cookie_; void *mouse_callback_cookie_;
bool getAltKey();
bool getControlKey();
bool getShiftKey();
}; };
} }
} }
......
...@@ -126,6 +126,9 @@ ...@@ -126,6 +126,9 @@
#endif #endif
#include <opencv2/core.hpp> #include <opencv2/core.hpp>
#include <opencv2/viz.hpp>
#include <opencv2/viz/widget_accessor.hpp>
#include <opencv2/core/utility.hpp>
namespace cv namespace cv
{ {
...@@ -135,6 +138,7 @@ namespace cv ...@@ -135,6 +138,7 @@ namespace cv
} }
} }
#include "interactor_style.h"
#include "viz3d_impl.hpp" #include "viz3d_impl.hpp"
namespace cv namespace cv
...@@ -146,8 +150,5 @@ namespace cv ...@@ -146,8 +150,5 @@ namespace cv
} }
} }
#include <opencv2/viz.hpp>
#include <opencv2/viz/types.hpp>
#include "opencv2/viz/widget_accessor.hpp"
#endif #endif
...@@ -48,26 +48,6 @@ ...@@ -48,26 +48,6 @@
#include "precomp.hpp" #include "precomp.hpp"
//////////////////////////////////////////////////////////////////////////////////////////////////////
/// cv::viz::Color
cv::viz::Color::Color() : Scalar(0, 0, 0) {}
cv::viz::Color::Color(double gray) : Scalar(gray, gray, gray) {}
cv::viz::Color::Color(double blue, double green, double red) : Scalar(blue, green, red) {}
cv::viz::Color::Color(const Scalar& color) : Scalar(color) {}
cv::viz::Color cv::viz::Color::black() { return Color( 0, 0, 0); }
cv::viz::Color cv::viz::Color::green() { return Color( 0, 255, 0); }
cv::viz::Color cv::viz::Color::blue() { return Color(255, 0, 0); }
cv::viz::Color cv::viz::Color::cyan() { return Color(255, 255, 0); }
cv::viz::Color cv::viz::Color::red() { return Color( 0, 0, 255); }
cv::viz::Color cv::viz::Color::yellow() { return Color( 0, 255, 255); }
cv::viz::Color cv::viz::Color::magenta() { return Color(255, 0, 255); }
cv::viz::Color cv::viz::Color::white() { return Color(255, 255, 255); }
cv::viz::Color cv::viz::Color::gray() { return Color(128, 128, 128); }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
/// cv::viz::KeyboardEvent /// cv::viz::KeyboardEvent
......
...@@ -50,18 +50,9 @@ ...@@ -50,18 +50,9 @@
cv::Affine3f cv::viz::makeTransformToGlobal(const Vec3f& axis_x, const Vec3f& axis_y, const Vec3f& axis_z, const Vec3f& origin) cv::Affine3f cv::viz::makeTransformToGlobal(const Vec3f& axis_x, const Vec3f& axis_y, const Vec3f& axis_z, const Vec3f& origin)
{ {
Affine3f::Mat3 R; Affine3f::Mat3 R(axis_x[0], axis_y[0], axis_z[0],
R.val[0] = axis_x.val[0]; axis_x[1], axis_y[1], axis_z[1],
R.val[3] = axis_x.val[1]; axis_x[2], axis_y[2], axis_z[2]);
R.val[6] = axis_x.val[2];
R.val[1] = axis_y.val[0];
R.val[4] = axis_y.val[1];
R.val[7] = axis_y.val[2];
R.val[2] = axis_z.val[0];
R.val[5] = axis_z.val[1];
R.val[8] = axis_z.val[2];
return Affine3f(R, origin); return Affine3f(R, origin);
} }
...@@ -73,22 +64,7 @@ cv::Affine3f cv::viz::makeCameraPose(const Vec3f& position, const Vec3f& focal_p ...@@ -73,22 +64,7 @@ cv::Affine3f cv::viz::makeCameraPose(const Vec3f& position, const Vec3f& focal_p
Vec3f u = normalize(y_dir.cross(n)); Vec3f u = normalize(y_dir.cross(n));
Vec3f v = n.cross(u); Vec3f v = n.cross(u);
Matx44f pose_mat = Matx44f::zeros(); return makeTransformToGlobal(u, v, n, position);
pose_mat(0,0) = u[0];
pose_mat(0,1) = u[1];
pose_mat(0,2) = u[2];
pose_mat(1,0) = v[0];
pose_mat(1,1) = v[1];
pose_mat(1,2) = v[2];
pose_mat(2,0) = n[0];
pose_mat(2,1) = n[1];
pose_mat(2,2) = n[2];
pose_mat(3,0) = position[0];
pose_mat(3,1) = position[1];
pose_mat(3,2) = position[2];
pose_mat(3,3) = 1.0f;
pose_mat = pose_mat.t();
return pose_mat;
} }
vtkSmartPointer<vtkMatrix4x4> cv::viz::convertToVtkMatrix(const cv::Matx44f &m) vtkSmartPointer<vtkMatrix4x4> cv::viz::convertToVtkMatrix(const cv::Matx44f &m)
...@@ -109,36 +85,31 @@ cv::Matx44f cv::viz::convertToMatx(const vtkSmartPointer<vtkMatrix4x4>& vtk_matr ...@@ -109,36 +85,31 @@ cv::Matx44f cv::viz::convertToMatx(const vtkSmartPointer<vtkMatrix4x4>& vtk_matr
return m; return m;
} }
namespace cv namespace cv { namespace viz
{ {
namespace viz template<typename _Tp> Vec<_Tp, 3>* vtkpoints_data(vtkSmartPointer<vtkPoints>& points);
template<> Vec3f* vtkpoints_data<float>(vtkSmartPointer<vtkPoints>& points)
{ {
template<typename _Tp> Vec<_Tp, 3>* vtkpoints_data(vtkSmartPointer<vtkPoints>& points); CV_Assert(points->GetDataType() == VTK_FLOAT);
vtkDataArray *data = points->GetData();
template<> Vec3f* vtkpoints_data<float>(vtkSmartPointer<vtkPoints>& points) float *pointer = static_cast<vtkFloatArray*>(data)->GetPointer(0);
{ return reinterpret_cast<Vec3f*>(pointer);
CV_Assert(points->GetDataType() == VTK_FLOAT);
vtkDataArray *data = points->GetData();
float *pointer = static_cast<vtkFloatArray*>(data)->GetPointer(0);
return reinterpret_cast<Vec3f*>(pointer);
}
template<> Vec3d* vtkpoints_data<double>(vtkSmartPointer<vtkPoints>& points)
{
CV_Assert(points->GetDataType() == VTK_DOUBLE);
vtkDataArray *data = points->GetData();
double *pointer = static_cast<vtkDoubleArray*>(data)->GetPointer(0);
return reinterpret_cast<Vec3d*>(pointer);
}
} }
}
template<> Vec3d* vtkpoints_data<double>(vtkSmartPointer<vtkPoints>& points)
{
CV_Assert(points->GetDataType() == VTK_DOUBLE);
vtkDataArray *data = points->GetData();
double *pointer = static_cast<vtkDoubleArray*>(data)->GetPointer(0);
return reinterpret_cast<Vec3d*>(pointer);
}
}}
/////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////
/// Viz accessor implementation /// Viz accessor implementation
cv::viz::VizAccessor * cv::viz::VizAccessor::instance_ = 0; cv::viz::VizAccessor * cv::viz::VizAccessor::instance_ = 0;
bool cv::viz::VizAccessor::is_instantiated_ = false;
cv::viz::VizAccessor::VizAccessorImpl * cv::viz::VizAccessor::impl_ = 0;
struct cv::viz::VizAccessor::VizAccessorImpl struct cv::viz::VizAccessor::VizAccessorImpl
{ {
...@@ -146,33 +117,22 @@ struct cv::viz::VizAccessor::VizAccessorImpl ...@@ -146,33 +117,22 @@ struct cv::viz::VizAccessor::VizAccessorImpl
}; };
cv::viz::VizAccessor::VizAccessor() { impl_ = new cv::viz::VizAccessor::VizAccessorImpl;} cv::viz::VizAccessor::VizAccessor() { impl_ = new cv::viz::VizAccessor::VizAccessorImpl;}
cv::viz::VizAccessor::~VizAccessor() { delete impl_; }
cv::viz::VizAccessor::~VizAccessor()
{
if(impl_)
{
delete impl_;
impl_ = 0;
}
}
cv::viz::VizAccessor & cv::viz::VizAccessor::getInstance() cv::viz::VizAccessor & cv::viz::VizAccessor::getInstance()
{ {
if (!is_instantiated_) if (!instance_)
{
instance_ = new VizAccessor(); instance_ = new VizAccessor();
is_instantiated_ = true;
}
return *instance_; return *instance_;
} }
void cv::viz::VizAccessor::release() void cv::viz::VizAccessor::release()
{ {
if (is_instantiated_) if (instance_)
{ {
delete instance_; delete instance_;
instance_ = 0; instance_ = 0;
is_instantiated_ = false;
} }
} }
...@@ -183,18 +143,15 @@ cv::viz::Viz3d cv::viz::VizAccessor::get(const String & window_name) ...@@ -183,18 +143,15 @@ cv::viz::Viz3d cv::viz::VizAccessor::get(const String & window_name)
generateWindowName(window_name, name); generateWindowName(window_name, name);
VizMap::iterator vm_itr = impl_->viz_map.find(name); VizMap::iterator vm_itr = impl_->viz_map.find(name);
bool exists = vm_itr != impl_->viz_map.end(); return vm_itr != impl_->viz_map.end() ? vm_itr->second : Viz3d(window_name);
if (exists) return vm_itr->second;
else return Viz3d(window_name);
} }
void cv::viz::VizAccessor::add(Viz3d window) void cv::viz::VizAccessor::add(Viz3d window)
{ {
String window_name = window.getWindowName(); String window_name = window.getWindowName();
VizMap::iterator vm_itr = impl_->viz_map.find(window_name); VizMap::iterator vm_itr = impl_->viz_map.find(window_name);
bool exists = vm_itr != impl_->viz_map.end(); if (vm_itr == impl_->viz_map.end())
if (exists) return ; impl_->viz_map.insert(VizPair(window_name, window));
impl_->viz_map.insert(VizPair(window_name, window));
} }
void cv::viz::VizAccessor::remove(const String &window_name) void cv::viz::VizAccessor::remove(const String &window_name)
...@@ -204,21 +161,24 @@ void cv::viz::VizAccessor::remove(const String &window_name) ...@@ -204,21 +161,24 @@ void cv::viz::VizAccessor::remove(const String &window_name)
generateWindowName(window_name, name); generateWindowName(window_name, name);
VizMap::iterator vm_itr = impl_->viz_map.find(name); VizMap::iterator vm_itr = impl_->viz_map.find(name);
bool exists = vm_itr != impl_->viz_map.end(); if (vm_itr != impl_->viz_map.end())
if (!exists) return ; impl_->viz_map.erase(vm_itr);
impl_->viz_map.erase(vm_itr);
} }
void cv::viz::VizAccessor::generateWindowName(const String &window_name, String &output) void cv::viz::VizAccessor::generateWindowName(const String &window_name, String &output)
{ {
output = "Viz"; output = "Viz";
// Already is Viz // Already is Viz
if (window_name == output) return; if (window_name == output)
return;
String prefixed = output + " - "; String prefixed = output + " - ";
if (window_name.substr(0, prefixed.length()) == prefixed) output = window_name; // Already has "Viz - " if (window_name.substr(0, prefixed.length()) == prefixed)
else if (window_name.substr(0, output.length()) == output) output = prefixed + window_name; // Doesn't have prefix output = window_name; // Already has "Viz - "
else output = (window_name == "" ? output : prefixed + window_name); else if (window_name.substr(0, output.length()) == output)
output = prefixed + window_name; // Doesn't have prefix
else
output = (window_name == "" ? output : prefixed + window_name);
} }
cv::viz::Viz3d cv::viz::get(const String &window_name) cv::viz::Viz3d cv::viz::get(const String &window_name)
......
...@@ -46,8 +46,7 @@ ...@@ -46,8 +46,7 @@
// //
//M*/ //M*/
#include <opencv2/viz/viz3d.hpp> #include "precomp.hpp"
#include "viz3d_impl.hpp"
cv::viz::Viz3d::Viz3d(const String& window_name) : impl_(0) { create(window_name); } cv::viz::Viz3d::Viz3d(const String& window_name) : impl_(0) { create(window_name); }
......
...@@ -47,10 +47,6 @@ ...@@ -47,10 +47,6 @@
//M*/ //M*/
#include "precomp.hpp" #include "precomp.hpp"
#include "viz3d_impl.hpp"
#include "opencv2/core/utility.hpp"
#include <vtkRenderWindowInteractor.h>
#if 1 || !defined __APPLE__ #if 1 || !defined __APPLE__
vtkRenderWindowInteractor* vtkRenderWindowInteractorFixNew() vtkRenderWindowInteractor* vtkRenderWindowInteractorFixNew()
...@@ -61,9 +57,7 @@ vtkRenderWindowInteractor* vtkRenderWindowInteractorFixNew() ...@@ -61,9 +57,7 @@ vtkRenderWindowInteractor* vtkRenderWindowInteractorFixNew()
///////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////
cv::viz::Viz3d::VizImpl::VizImpl(const String &name) cv::viz::Viz3d::VizImpl::VizImpl(const String &name)
: style_(vtkSmartPointer<cv::viz::InteractorStyle>::New()) : style_(vtkSmartPointer<cv::viz::InteractorStyle>::New()) , widget_actor_map_(new WidgetActorMap), s_lastDone_(0.0)
, widget_actor_map_(new WidgetActorMap)
, s_lastDone_(0.0)
{ {
renderer_ = vtkSmartPointer<vtkRenderer>::New(); renderer_ = vtkSmartPointer<vtkRenderer>::New();
...@@ -128,7 +122,8 @@ cv::viz::Viz3d::VizImpl::~VizImpl() ...@@ -128,7 +122,8 @@ cv::viz::Viz3d::VizImpl::~VizImpl()
{ {
if (interactor_) if (interactor_)
interactor_->DestroyTimer(timer_id_); interactor_->DestroyTimer(timer_id_);
if (renderer_) renderer_->Clear(); if (renderer_)
renderer_->Clear();
} }
///////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////
...@@ -395,7 +390,7 @@ cv::viz::Camera cv::viz::Viz3d::VizImpl::getCamera() const ...@@ -395,7 +390,7 @@ cv::viz::Camera cv::viz::Viz3d::VizImpl::getCamera() const
Size window_size(renderer_->GetRenderWindow()->GetSize()[0], Size window_size(renderer_->GetRenderWindow()->GetSize()[0],
renderer_->GetRenderWindow()->GetSize()[1]); renderer_->GetRenderWindow()->GetSize()[1]);
double aspect_ratio = static_cast<double>(window_size.width) / static_cast<double>(window_size.height); double aspect_ratio = window_size.width / (double)window_size.height;
Matx44f proj_matrix = convertToMatx(active_camera.GetProjectionTransformMatrix(aspect_ratio, -1.0f, 1.0f)); Matx44f proj_matrix = convertToMatx(active_camera.GetProjectionTransformMatrix(aspect_ratio, -1.0f, 1.0f));
Camera camera(proj_matrix, window_size); Camera camera(proj_matrix, window_size);
......
...@@ -49,9 +49,6 @@ ...@@ -49,9 +49,6 @@
#ifndef __OPENCV_VIZ_VIZ3D_IMPL_HPP__ #ifndef __OPENCV_VIZ_VIZ3D_IMPL_HPP__
#define __OPENCV_VIZ_VIZ3D_IMPL_HPP__ #define __OPENCV_VIZ_VIZ3D_IMPL_HPP__
#include <opencv2/viz.hpp>
#include "interactor_style.h"
struct cv::viz::Viz3d::VizImpl struct cv::viz::Viz3d::VizImpl
{ {
public: public:
...@@ -127,10 +124,7 @@ private: ...@@ -127,10 +124,7 @@ private:
struct ExitMainLoopTimerCallback : public vtkCommand struct ExitMainLoopTimerCallback : public vtkCommand
{ {
static ExitMainLoopTimerCallback* New() static ExitMainLoopTimerCallback* New() { return new ExitMainLoopTimerCallback; }
{
return new ExitMainLoopTimerCallback;
}
virtual void Execute(vtkObject* vtkNotUsed(caller), unsigned long event_id, void* call_data) virtual void Execute(vtkObject* vtkNotUsed(caller), unsigned long event_id, void* call_data)
{ {
if (event_id != vtkCommand::TimerEvent) if (event_id != vtkCommand::TimerEvent)
...@@ -149,10 +143,7 @@ private: ...@@ -149,10 +143,7 @@ private:
struct ExitCallback : public vtkCommand struct ExitCallback : public vtkCommand
{ {
static ExitCallback* New() static ExitCallback* New() { return new ExitCallback; }
{
return new ExitCallback;
}
virtual void Execute(vtkObject*, unsigned long event_id, void*) virtual void Execute(vtkObject*, unsigned long event_id, void*)
{ {
if (event_id == vtkCommand::ExitEvent) if (event_id == vtkCommand::ExitEvent)
...@@ -191,21 +182,7 @@ private: ...@@ -191,21 +182,7 @@ private:
bool removeActorFromRenderer(const vtkSmartPointer<vtkProp> &actor); bool removeActorFromRenderer(const vtkSmartPointer<vtkProp> &actor);
/** \brief Internal method. Creates a vtk actor from a vtk polydata object.
* \param[in] data the vtk polydata object to create an actor for
* \param[out] actor the resultant vtk actor object
* \param[in] use_scalars set scalar properties to the mapper if it exists in the data. Default: true.
*/
void createActorFromVTKDataSet(const vtkSmartPointer<vtkDataSet> &data, vtkSmartPointer<vtkLODActor> &actor, bool use_scalars = true); void createActorFromVTKDataSet(const vtkSmartPointer<vtkDataSet> &data, vtkSmartPointer<vtkLODActor> &actor, bool use_scalars = true);
/** \brief Updates a set of cells (vtkIdTypeArray) if the number of points in a cloud changes
* \param[out] cells the vtkIdTypeArray object (set of cells) to update
* \param[out] initcells a previously saved set of cells. If the number of points in the current cloud is
* higher than the number of cells in \a cells, and initcells contains enough data, then a copy from it
* will be made instead of regenerating the entire array.
* \param[in] nr_points the number of points in the new cloud. This dictates how many cells we need to
* generate
*/
void updateCells(vtkSmartPointer<vtkIdTypeArray> &cells, vtkSmartPointer<vtkIdTypeArray> &initcells, vtkIdType nr_points); void updateCells(vtkSmartPointer<vtkIdTypeArray> &cells, vtkSmartPointer<vtkIdTypeArray> &initcells, vtkIdType nr_points);
}; };
......
...@@ -60,6 +60,8 @@ ...@@ -60,6 +60,8 @@
#include "opencv2/ts.hpp" #include "opencv2/ts.hpp"
#include <opencv2/core.hpp> #include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp> #include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/viz.hpp>
#include <iostream> #include <iostream>
#include <fstream> #include <fstream>
......
#include "test_precomp.hpp"
using namespace cv;
using namespace std;
/**
* @function cvcloud_load
* @brief load bunny.ply
*/
Mat cvcloud_load()
{
Mat cloud(1, 20000, CV_32FC3);
ifstream ifs("d:/cloud_dragon.ply");
string str;
for(size_t i = 0; i < 12; ++i)
getline(ifs, str);
Point3f* data = cloud.ptr<cv::Point3f>();
//float dummy1, dummy2;
for(size_t i = 0; i < 20000; ++i)
ifs >> data[i].x >> data[i].y >> data[i].z;// >> dummy1 >> dummy2;
//cloud *= 5.0f;
return cloud;
}
/**
* @function main
*/
void tutorial3(bool camera_pov)
{
/// Create a window
viz::Viz3d myWindow("Coordinate Frame");
/// Add coordinate axes
myWindow.showWidget("Coordinate Widget", viz::WCoordinateSystem());
/// Let's assume camera has the following properties
Point3f cam_pos(3.0f,3.0f,3.0f), cam_focal_point(3.0f,3.0f,2.0f), cam_y_dir(-1.0f,0.0f,0.0f);
/// We can get the pose of the cam using makeCameraPose
Affine3f cam_pose = viz::makeCameraPose(cam_pos, cam_focal_point, cam_y_dir);
/// We can get the transformation matrix from camera coordinate system to global using
/// - makeTransformToGlobal. We need the axes of the camera
Affine3f transform = viz::makeTransformToGlobal(Vec3f(0.0f,-1.0f,0.0f), Vec3f(-1.0f,0.0f,0.0f), Vec3f(0.0f,0.0f,-1.0f), cam_pos);
/// Create a cloud widget.
Mat bunny_cloud = cvcloud_load();
viz::WCloud cloud_widget(bunny_cloud, viz::Color::green());
/// Pose of the widget in camera frame
Affine3f cloud_pose = Affine3f().translate(Vec3f(0.0f,0.0f,3.0f));
/// Pose of the widget in global frame
Affine3f cloud_pose_global = transform * cloud_pose;
/// Visualize camera frame
if (!camera_pov)
{
viz::WCameraPosition cpw(0.5); // Coordinate axes
viz::WCameraPosition cpw_frustum(Vec2f(0.889484, 0.523599)); // Camera frustum
myWindow.showWidget("CPW", cpw, cam_pose);
myWindow.showWidget("CPW_FRUSTUM", cpw_frustum, cam_pose);
}
/// Visualize widget
myWindow.showWidget("bunny", cloud_widget, cloud_pose_global);
/// Set the viewer pose to that of camera
if (camera_pov)
myWindow.setViewerPose(cam_pose);
/// Start event loop.
myWindow.spin();
}
TEST(Viz_viz3d, DISABLED_tutorial3_global_view)
{
tutorial3(false);
}
TEST(Viz_viz3d, DISABLED_tutorial3_camera_view)
{
tutorial3(true);
}
...@@ -40,13 +40,11 @@ ...@@ -40,13 +40,11 @@
// //
//M*/ //M*/
#include "test_precomp.hpp" #include "test_precomp.hpp"
#include <opencv2/viz.hpp>
#include <opencv2/highgui.hpp>
#include <string>
using namespace cv; using namespace cv;
cv::Mat cvcloud_load() static cv::Mat cvcloud_load()
{ {
cv::Mat cloud(1, 20000, CV_32FC3); cv::Mat cloud(1, 20000, CV_32FC3);
std::ifstream ifs("/Users/nerei/cloud_dragon.ply"); std::ifstream ifs("/Users/nerei/cloud_dragon.ply");
...@@ -90,7 +88,7 @@ void keyboard_callback(const viz::KeyboardEvent & event, void * cookie) ...@@ -90,7 +88,7 @@ void keyboard_callback(const viz::KeyboardEvent & event, void * cookie)
} }
} }
TEST(Viz_viz3d, accuracy) TEST(Viz_viz3d, develop)
{ {
cv::viz::Viz3d viz("abc"); cv::viz::Viz3d viz("abc");
...@@ -98,19 +96,18 @@ TEST(Viz_viz3d, accuracy) ...@@ -98,19 +96,18 @@ TEST(Viz_viz3d, accuracy)
cv::viz::WMesh bunny_widget(bunny_mesh); cv::viz::WMesh bunny_widget(bunny_mesh);
bunny_widget.setColor(cv::viz::Color::cyan()); bunny_widget.setColor(cv::viz::Color::cyan());
cam_1 = cv::viz::WCameraPosition(cv::Vec2f(0.6, 0.4), 0.2, cv::viz::Color::green()); cam_1 = cv::viz::WCameraPosition(cv::Vec2f(0.6f, 0.4f), 0.2, cv::viz::Color::green());
cam_coordinates = cv::viz::WCameraPosition(0.2); cam_coordinates = cv::viz::WCameraPosition(0.2);
viz.showWidget("bunny", bunny_widget); viz.showWidget("bunny", bunny_widget);
viz.showWidget("cam_1", cam_1, viz::makeCameraPose(Point3f(1.0,0.0,0.0), Point3f(0.0,0.0,0.0), Point3f(0.0,1.0,0.0))); viz.showWidget("cam_1", cam_1, viz::makeCameraPose(Point3f(1.f,0.f,0.f), Point3f(0.f,0.f,0.f), Point3f(0.f,1.f,0.f)));
viz.showWidget("cam_coordinate", cam_coordinates, viz::makeCameraPose(Point3f(1.0,0.0,0.0), Point3f(0.0,0.0,0.0), Point3f(0.0,1.0,0.0))); viz.showWidget("cam_coordinate", cam_coordinates, viz::makeCameraPose(Point3f(1.f,0.f,0.f), Point3f(0.f,0.f,0.f), Point3f(0.f,1.f,0.f)));
std::vector<Affine3f> cam_path; std::vector<Affine3f> cam_path;
for (int i = 0, j = 0; i <= 360; ++i, j+=5) for (int i = 0, j = 0; i <= 360; ++i, j+=5)
{ {
cam_path.push_back(viz::makeCameraPose(Point3f(0.5*cos(double(i)*CV_PI/180.0), 0.5*sin(double(j)*CV_PI/180.0), 0.5*sin(double(i)*CV_PI/180.0)), cam_path.push_back(viz::makeCameraPose(Vec3d(0.5*cos(i*CV_PI/180.0), 0.5*sin(j*CV_PI/180.0), 0.5*sin(i*CV_PI/180.0)), Vec3f(0.f, 0.f, 0.f), Vec3f(0.f, 1.f, 0.f)));
Point3f(0.0,0.0,0.0), Point3f(0.0,1.0,0.0)));
} }
int path_counter = 0; int path_counter = 0;
...@@ -133,7 +130,7 @@ TEST(Viz_viz3d, accuracy) ...@@ -133,7 +130,7 @@ TEST(Viz_viz3d, accuracy)
colors[col] = Mat::zeros(img.rows/downSample, 1, CV_8UC3); colors[col] = Mat::zeros(img.rows/downSample, 1, CV_8UC3);
for (int row = 0; row < row_max; ++row) for (int row = 0; row < row_max; ++row)
{ {
clouds[col].at<Vec3f>(row) = Vec3f(downSample * float(col) / img.cols, 1.0-(downSample * float(row) / img.rows), 0.0); clouds[col].at<Vec3f>(row) = Vec3f(downSample * float(col) / img.cols, 1.f-(downSample * float(row) / img.rows), 0.f);
colors[col].at<Vec3b>(row) = img.at<Vec3b>(row*downSample,col*downSample); colors[col].at<Vec3b>(row) = img.at<Vec3b>(row*downSample,col*downSample);
} }
} }
...@@ -174,9 +171,11 @@ TEST(Viz_viz3d, accuracy) ...@@ -174,9 +171,11 @@ TEST(Viz_viz3d, accuracy)
{ {
std::stringstream strstrm; std::stringstream strstrm;
strstrm << "cloud_" << i; strstrm << "cloud_" << i;
viz.setWidgetPose(strstrm.str(), Affine3f().translate(Vec3f(-0.5,0.0, -0.7 + 0.2*sin((angle+i*10)*CV_PI / 180.0)))); viz.setWidgetPose(strstrm.str(), Affine3f().translate(Vec3f(-0.5f, 0.f, (float)(-0.7 + 0.2*sin((angle+i*10)*CV_PI / 180.0)))));
} }
angle += 10; angle += 10;
viz.spinOnce(42, true); viz.spinOnce(42, true);
} }
volatile void* a = (void*)&cvcloud_load; (void)a; //fixing warnings
} }
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