Es gibt eine JPG-Datei, ich möchte es in eine Mat von n * 3, 3 Spalten für BGR, n Zeilen für die Anzahl der Pixel in der JPG-Bild neu anordnen.opencv create mat und füge Elemente hinzu
Hier ist was ich bisher gemacht habe.
Mat img = imread(test.jpg);
Mat imgHSV;
cvtColor(img, imgHSV, COLOR_BGR2HSV);
vector<Mat> imgHSV_split;
split(imgHSV,imgHSV_split); //split the 3 channel image into 3 single channel mats
Mat img_combind_feature(imgHSV.rows*imgHSV.cols(),3,CV_8UC1);
for(int i=0; i < imgHSV.row; i++){
for(int j=0; j < imgHSV.col; j++){
for (int k=0; k<3; k++){
img_combind_feature.row(l).col(k) = imgHSV_split[k].row(i).col(j);
}
}
}
Bevor ich diesen Code ausführen, habe ich versucht, eine einfache 3 * 3-Version,
Mat img = imread(test.jpg);
Mat imgHSV;
cvtColor(img, imgHSV, COLOR_BGR2HSV);
vector<Mat> imgHSV_split;
split(imgHSV,imgHSV_split); //split the 3 channel image into 3 single channel mats
Mat img_combind_feature(1,3,CV_8UI1);
img_combind_feature.row(0).col(0) = imgHSV_split[0].row(0).col(0);
img_combind_feature.row(0).col(1) = imgHSV_split[1].row(0).col(0);
img_combind_feature.row(0).col(2) = imgHSV_split[2].row(0).col(0);
cout << imgHSV_split[0].row(0).col(0) << endl;
cout << img_combind_feature.row(0).col(0) << endl;
Die beiden Ausgänge sind unterschiedlich.
[ 43] [232]
Liegt das an irgendeiner Datentypübersetzung zwischen den zwei Matten? Und ich bin mir nicht sicher, ob dies ein guter Weg ist, wenn es dafür handhabbare Wege gibt?
Das ist genau das, wofür ich es brauche, kmeans! Vielen Dank! – tomu
Froh, dass es geholfen hat, D – Miki
Ich habe auf die Zecke geklickt, und es ist grün, ist es akzeptiert – tomu