est concaténation Voici le code Matlab je suis en train de se reproduire dans OpenCV 2.4.11
OpenCV vs matrice Matlab
A = [1 1; 1 1];
B = [2 2; 2 2];
C = [3 3; 3 3];
D = cat(3, A, B,C)
D= imresize(D, [100 50], 'nearest');
C'est ce que je l'ai essayé jusqu'à présent. mais pour autant que je comprenne que ce n'est pas la même matrice 3 D, openCV ajoute juste les matrices l'une à côté de l'autre.
cv::Mat a(2,2,CV_64F);
cv::Mat b(2,2,CV_64F);
cv::Mat c(2,2,CV_64F);
for (int i = 0; i < 4; i++)
{
a.at<double>(i) = 1;
b.at<double>(i) = 2;
c.at<double>(i) = 3;
}
cv::Mat d;
std::vector<cv::Mat>tempVec;
tempVec.push_back(a);
tempVec.push_back(b);
tempVec.push_back(c);
cv::hconcat(tempVec,d);
J'ai aussi essayé
cv::Mat d = cv::Mat::zeros(2,2,CV_64FC3);
for (int w = 0; w < 2; w++)
{
for (int h = 0; h < 2; h++)
{
d.at<cv::Vec3d>(w,h)[0] = a.at<double>(w,h);
d.at<cv::Vec3d>(w,h)[1] = b.at<double>(w,h);
d.at<cv::Vec3d>(w,h)[2] = c.at<double>(w,h);
}
}
peut vous aider s'il vous plaît? s'il vous plaît voir que je dois utiliser imresize dans la ligne suivante de matlab, donc la solution devrait être cv :: Mat
va cv :: Mat avec cv :: Vec3f faire l'affaire? ou existe-t-il un meilleur moyen de concaténer 3 matrices en une matrice 3D?
mise à jour: j'ai changé cv::hconcat(tempVec,d);
dans cv::merge(tempVec, d);
et ajoutez cette impression dans un fichier
ofstream myfile;
myfile.open("C:\\Users\\gdarmon\\Desktop\\OpenCV_TNR.txt");
myfile << d;
myfile.close();
ici est ma sortie
[1, 2, 3, 1, 2, 3;
1, 2, 3, 1, 2, 3]
s'il vous plaît regarder ma mise à jour. Je n'ai toujours pas les mêmes résultats que matlab – Gilad
Oups. Pardon. J'ai besoin de réparer ça. Je ne déclare pas ma matrice de sortie correctement. Tenez – rayryeng
Je n'ai aucune idée ... 'cv :: merge' est supposé fonctionner ... J'ai même utilisé ceci comme référence: http://stackoverflow.com/questions/14582082/merging-channels-in-opencv – rayryeng