以下是我将边界框划分为较小部分的过程。
class reticula
{
int _columnas;
int _renglones;
int _num_pixelotes;
vector<vector<Point> > Pixelotes;
public:
reticula():
_columnas(0),
_renglones(0),
_num_pixelotes(0),
Pixelotes(){};
/// crear la reticula con los valores deseados
reticula(vector<Point> verticesB, int renglon, int columna);
Size size(void);
vector<Point> en(int el_renglon, int la_columna);
~reticula(void);
};
reticula::reticula(vector<Point> verticesB, int renglon, int columna ){
if(verticesB.size()!= 4){
cout<< "El vector debe tener las 4 esquinas del rectangulo a dividir"
<< endl;
throw 400; // es para mandar la exepción.
}
_columnas = columna;
_renglones = renglon;
_num_pixelotes = columna * renglon ;
Pixelotes.resize(_renglones * _columnas);
double dis_mayor, dis_menor;//con respecto a los ejes
Point dif_10;
Point dif_21;
Point dif_32;
Point dif_03;
double es_mayor, es_menor;
dif_10 = verticesB[1]-verticesB[0];
dif_21 = verticesB[2]-verticesB[1];
dif_32 = verticesB[3]-verticesB[2];
dif_03 = verticesB[0]-verticesB[3];
dis_mayor = norm(dif_10);
dis_menor = norm(dif_21);
es_mayor = dis_mayor/(double) _columnas;
es_menor = dis_menor/(double) _renglones;
Point aux;
Point aux2;
vector<Point> vertices_re((_columnas + 1)*(_renglones + 1));
for (int i = 0; i < _renglones; i++){
for(int j= 0; j < _columnas; j++){
for(int h=0; h < 4; h++ ){
aux = verticesB[0] + ((((double)j*dis_mayor) * dif_10) + (((double)i * dis_menor)*dif_21));
if(h=0){aux2= aux;}
else if(h=1){aux2= aux + (dis_mayor * dif_10);}
else if(h=2){aux2= aux + (dis_mayor * dif_10) + (dis_menor * dif_21);}
else if(h=3){aux2= aux + (dis_menor * dif_21);}
Pixelotes[i * _columnas + j].push_back(aux2);
}
}
}
}
Size reticula::size(void){
Size Total;
Total.width = _columnas;
Total.height = _renglones;
return Total;
}
vector<Point> reticula::en(int el_renglon, int la_columna){
if(el_renglon > _renglones|| la_columna> _columnas){
cout << " el renglon y la columna se deben encontrar dentro de los parametros "
<<endl;
cout<< _renglones<<" , "<<_columnas<<endl;
vector<Point> vacio;
vacio.push_back(Point(0,0));
return (vacio);
}
int busca;
busca = el_renglon * _columnas + la_columna;
}
我想创建一个包含这个类的向量,但我不知道我做错了什么
vector<reticula> SoloReti(contours.size());
for(int g=0; g< SoloReti.size(); g++){
SoloReti[g].reticula(contours[g], 5,4);
}
g ++编译器告诉“无效使用网状网::网状网”有人能告诉我问题在哪里吗?
答案 0 :(得分:1)
当您声明vector<reticula> SoloReti(contours.size())
时,它会使用默认构造函数contours.size()
初始化带有reticula()
网格构建的向量。
执行SoloReti[g].reticula
时,您试图从已构造的对象中调用构造函数。解决方案:使用赋值运算符:
vector<reticula> SoloReti(contours.size());
for(int g=0; g< SoloReti.size(); g++){
SoloReti[g] = reticula(contours[g], 5,4);
}
答案 1 :(得分:0)
我认为这就是你想要的:
vector<reticula> SoloReti;
for(int g = 0; g < countors.size(); g++)
{
reticula tmp(contours[g], 5, 4);
SoloReti.push_back(tmp);
}