@@ -85,22 +85,33 @@ class DictNetCaffeImpl: public DictNet{
85
85
Ptr<caffe::Net<float > > net_;
86
86
#endif
87
87
Size inputGeometry_;
88
- const int minibatchSz_;
89
- const bool gpuBackend_;
88
+ int minibatchSz_;// The existence of the assignment operator mandates this to be nonconst
89
+ bool gpuBackend_;// The existence of the assignment operator mandates this to be nonconst
90
90
int outputSize_;
91
91
public:
92
92
DictNetCaffeImpl (const DictNetCaffeImpl& dn):inputGeometry_(dn.inputGeometry_),minibatchSz_(dn.minibatchSz_),
93
93
gpuBackend_ (dn.gpuBackend_),outputSize_(dn.outputSize_){
94
- // Implemented to supress Visual Studio warning
94
+ // Implemented to supress Visual Studio warning "assignment operator could not be generated"
95
95
#ifdef HAVE_CAFFE
96
96
this ->net_ =dn.net_ ;
97
97
#endif
98
98
}
99
+ DictNetCaffeImpl& operator =(const DictNetCaffeImpl &dn){
100
+ #ifdef HAVE_CAFFE
101
+ this ->net_ =dn.net_ ;
102
+ #endif
103
+ this ->inputGeometry_ =dn.inputGeometry_ ;
104
+ this ->minibatchSz_ =dn.minibatchSz_ ;
105
+ this ->gpuBackend_ =dn.gpuBackend_ ;
106
+ this ->outputSize_ =dn.outputSize_ ;
107
+ return *this ;
108
+ // Implemented to supress Visual Studio warning "assignment operator could not be generated"
109
+ }
99
110
100
111
DictNetCaffeImpl (String modelArchFilename, String modelWeightsFilename, int maxMinibatchSz, bool useGpu)
101
112
:minibatchSz_(maxMinibatchSz), gpuBackend_(useGpu){
102
113
CV_Assert (this ->minibatchSz_ >0 );
103
- CV_Assert (fileExists (modelArchFilename) );
114
+ CV_Assert (fileExists (modelArchFilename));
104
115
CV_Assert (fileExists (modelWeightsFilename));
105
116
#ifdef HAVE_CAFFE
106
117
if (this ->gpuBackend_ ){
@@ -133,10 +144,12 @@ class DictNetCaffeImpl: public DictNet{
133
144
void classifyBatch (InputArrayOfArrays inputImageList, OutputArray classProbabilities){
134
145
std::vector<Mat> allImageVector;
135
146
inputImageList.getMatVector (allImageVector);
136
- classProbabilities.create (Size ((size_t )(this ->outputSize_ ),allImageVector.size ()),CV_32F);
147
+ size_t outputSize=size_t (this ->outputSize_ );// temporary variable to avoid int to size_t arithmentic
148
+ size_t minibatchSize=this ->minibatchSz_ ;// temporary variable to avoid int to size_t arithmentic
149
+ classProbabilities.create (Size (outputSize,allImageVector.size ()),CV_32F);
137
150
Mat outputMat = classProbabilities.getMat ();
138
- for (size_t imgNum=0 ;imgNum<allImageVector.size ();imgNum+=this -> minibatchSz_ ){
139
- int rangeEnd=imgNum+std::min<int >(allImageVector.size ()-imgNum,this -> minibatchSz_ );
151
+ for (size_t imgNum=0 ;imgNum<allImageVector.size ();imgNum+=minibatchSize ){
152
+ int rangeEnd=imgNum+std::min<size_t >(allImageVector.size ()-imgNum,minibatchSize );
140
153
std::vector<Mat>::const_iterator from=allImageVector.begin ()+imgNum;
141
154
std::vector<Mat>::const_iterator to=allImageVector.begin ()+rangeEnd;
142
155
std::vector<Mat> minibatchInput (from,to);
0 commit comments