本文整理汇总了C++中Mat_::total方法的典型用法代码示例。如果您正苦于以下问题:C++ Mat_::total方法的具体用法?C++ Mat_::total怎么用?C++ Mat_::total使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Mat_
的用法示例。
在下文中一共展示了Mat_::total方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: add_feature
void add_feature(const Mat &image, const char *name)
{
assert (prediction.size() == image.size());
int found = 0;
string _name = string(name);
cout << "Got feature " << name << endl;
for (int wi = 0; wi < weak_learners.size(); wi++) {
if (weak_learners[wi].feature_name == _name) {
found = 1;
float *score_ptr = prediction.ptr<float>(0);
const float *feature_ptr = image.ptr<float>(0);
float thresh = weak_learners[wi].threshold;
float left_val = weak_learners[wi].left_val;
float right_val = weak_learners[wi].right_val;
for (int i = 0; i < prediction.total(); i++, feature_ptr++, score_ptr++)
*score_ptr += ((*feature_ptr <= thresh) ? left_val : right_val);
}
}
if (! found)
cout << "Didn't find any uses of feature " << name << endl;
// remove old weak learners from consideration
weak_learners.erase(remove(weak_learners.begin(), weak_learners.end(), name), weak_learners.end());
if (should_save(name))
write_feature(h5f, image, name);
}
示例2: fit
int BaseDecisionTree::fit(Mat_<double> _X,
Mat_<double> _y,
Mat_<double> sample_weight)
{
// Validation
if (_X.rows == 0 || _X.cols == 0)
return 1;
// Determine output setting
_n_samples = _X.rows;
_n_features = _X.cols;
// Reshape y to shape[n_samples, 1]
_y = _y.reshape(1, _y.total());
// Validation
if (_y.rows != _n_samples)
return 2;
// Calculate class_weight
Mat expended_class_weight(0, 0, CV_32F);
// Get class_weight
if (_class_weight.total() != 0)
expended_class_weight = compute_sample_weight(_class_weight, _y);
// Validation
if (_max_depth <= 0)
_max_depth = static_cast<int>(pow(2, 31) - 1);
if (_max_leaf_nodes <= 0)
_max_leaf_nodes = -1;
if (_max_features <= 0)
_max_features = _n_features;
if (_max_leaf_nodes > -1 && _max_leaf_nodes < 2)
return 3;
if (_min_samples_split <= 0)
return 4;
if (_min_samples_leaf <= 0)
return 5;
if (_min_weight_fraction_leaf >= 0 && _min_weight_fraction_leaf <= 0.5)
return 6;
// Set samples' weight
if (expended_class_weight.total())
{
for (int i = 0; i < sample_weight.total(); i++)
{
sample_weight.at<double>(i, 0) = sample_weight.at<double>(i, 0) * \
expended_class_weight.at<double>(i, 0);
}
}
else
{
sample_weight = expended_class_weight;
}
// Set min_weight_fraction_leaf
if (_min_weight_fraction_leaf != 0.)
_min_weight_fraction_leaf = _min_weight_fraction_leaf * cv::sum(sample_weight);
else
_min_weight_fraction_leaf = 0.;
// Set min_samples_split
_min_samples_split = max(_min_samples_split, 2 * _min_samples_leaf);
}
示例3: MaxFlowSuperpixel
void UtilsSegmentation::MaxFlowSuperpixel(std::vector<SuperpixelStatistic>& spstat, const Mat_<float>& fgdEnergy,
const Mat_<float>& bgdEnergy, float gamma, Mat_<int>& label)
{
//::Graph<float,float,float> graph(nNode,nEdge,errfunc);
//graph
int nEdge = UtilsSuperpixel::CountEdge(spstat);
Mat_<int> edgeVertex(nEdge,2);
Mat_<float> edgeWeight(nEdge,1);
Mat_<float> edgeLen(nEdge,1);
int idx = 0;
for(int i=0;i<spstat.size();i++)
{
SuperpixelStatistic& sp = spstat[i];
for( set<int>::iterator j=sp.conn.begin();
j!= sp.conn.end();
j++)
{
int d = (*j);
SuperpixelStatistic& dsp = spstat[d];
if ( i != d)
{
edgeVertex(idx,0) = min(i,d);
edgeVertex(idx,1) = max(i,d);
float diff = (float) norm(sp.mean_color_ - dsp.mean_color_);
edgeWeight(idx) = diff*diff;
edgeLen(idx) = (float) cv::norm(sp.mean_position_-dsp.mean_position_);
idx++;
}
}
}
float beta = (float) cv::mean(edgeWeight)[0];
Graph<float,float,float> graph((int)spstat.size(), nEdge, errfunc);
graph.add_node((int)spstat.size());
for(int i=0;i<fgdEnergy.total();i++)
{
graph.add_tweights(i,bgdEnergy(i),fgdEnergy(i));
}
edgeWeight = - edgeWeight / beta;
cv::exp(edgeWeight,edgeWeight);
edgeWeight *= gamma;
cv::divide(edgeWeight, edgeLen,edgeWeight);
for(int i=0;i<nEdge;i++)
{
float w = edgeWeight(i);
graph.add_edge(edgeVertex(i,0),edgeVertex(i,1),w,w);
}
graph.maxflow();
label.create((int)spstat.size(),1);
for(int i=0;i<spstat.size();i++)
{
if ( graph.what_segment(i) == Graph<float,float,float>::SOURCE)
{
label(i) = 1;
}
else
{
label(i) = 0;
}
}
}
示例4: R
//
// thanks again, Haris. i wouldn't be anywhere without your mind here.
//
Mat project3d(const Mat & test) const
{
PROFILEX("project3d");
int mid = mdl.cols/2;
int midi = test.cols/2;
Rect R(mid-crop/2,mid-crop/2,crop,crop);
Rect Ri(midi-crop/2,midi-crop/2,crop,crop);
// get landmarks
vector<Point2d> pts2d;
getkp2d(test, pts2d, Ri);
//cerr << "nose :" << pts2d[30].x << endl;
// get pose mat for our landmarks
Mat KP = pnp(test.size(), pts2d);
// project img to head, count occlusions
Mat_<uchar> test2(mdl.size(),127);
Mat_<uchar> counts(mdl.size(),0);
for (int i=R.y; i<R.y+R.height; i++)
{
PROFILEX("proj_1");
for (int j=R.x; j<R.x+R.width; j++)
{
Mat1d p = project_vec(KP, i, j);
int x = int(p(0) / p(2));
int y = int(p(1) / p(2));
if (y < 0 || y > test.rows - 1) continue;
if (x < 0 || x > test.cols - 1) continue;
// stare hard at the coord transformation ;)
test2(i, j) = test.at<uchar>(y, x);
// each point used more than once is occluded
counts(y, x) ++;
}
}
// project the occlusion counts in the same way
Mat_<uchar> counts1(mdl.size(),0);
for (int i=R.y; i<R.y+R.height; i++)
{
PROFILEX("proj_2");
for (int j=R.x; j<R.x+R.width; j++)
{
Mat1d p = project_vec(KP, i, j);
int x = int(p(0) / p(2));
int y = int(p(1) / p(2));
if (y < 0 || y > test.rows - 1) continue;
if (x < 0 || x > test.cols - 1) continue;
counts1(i, j) = counts(y, x);
}
}
blur(counts1, counts1, Size(9,9));
counts1 -= eyemask;
counts1 -= eyemask;
// count occlusions in left & right half
Rect left (0, 0,mid,counts1.rows);
Rect right(mid,0,mid,counts1.rows);
double sleft=sum(counts1(left))[0];
double sright=sum(counts1(right))[0];
// fix occlusions with soft symmetry
Mat_<double> weights;
Mat_<uchar> sym = test2.clone();
if (abs(sleft-sright)>symThresh)
{
PROFILEX("proj_3");
// make weights
counts1.convertTo(weights,CV_64F);
Point p,P;
double m,M;
minMaxLoc(weights,&m,&M,&p,&P);
double *wp = weights.ptr<double>();
for (size_t i=0; i<weights.total(); ++i)
wp[i] = (1.0 - 1.0 / exp(symBlend+(wp[i]/M)));
// cerr << weights(Rect(mid,mid,6,6)) << endl;
for (int i=R.y; i<R.y+R.height; i++)
{
if (sleft-sright>symThresh) // left side needs fixing
{
for (int j=R.x; j<mid; j++)
{
int k = mdl.cols-j-1;
sym(i,j) = test2(i,j) * (1-weights(i,j)) + test2(i,k) * (weights(i,j));
}
}
if (sright-sleft>symThresh) // right side needs fixing
{
for (int j=mid; j<R.x+R.width; j++)
{
int k = mdl.cols-j-1;
sym(i,j) = test2(i,j) * (1-weights(i,j)) + test2(i,k) * (weights(i,j));
//.........这里部分代码省略.........