Come convertire un OpenCV cv::Mat
in un float*
che può essere alimentato in Vlfeat vl_dsift_process
? Non riesco a capire come funziona vl_dsift_process
su un array float unidimensionale. Gli esempi ufficiali dimostrano solo come utilizzare l'API MatLab. Sembra che non ci siano esempi sull'API C e l'unico indizio è il file MEX nel pacchetto sorgente.Come convertire un OpenCV cv :: Mat in un float * che può essere inserito in Vlfeat vl_dsift_process?
risposta
float* matData = (float*)myMat.data;
Assicurarsi che la matrice non viene eliminato/va fuori del campo di applicazione prima di finire utilizzando il puntatore ai dati. E assicurati che la matrice contenga galleggianti.
La matrice deve essere controllata per essere continua, altrimenti non può essere interpretata come una matrice unidimensionale. E penso che sia più appropriato usare 'reinterpret_cast' qui in quanto indica chiaramente la natura pericolosa di questo cast. In ogni caso, l'estrazione di DSIFT sarebbe probabilmente di molti ordini di grandezza più lenta rispetto alla conversione della matrice in 'vector
non riesco a capire come funziona vl_dsift_process su una matrice galleggiante unidimensionale
DSIFT aspetta una scala di grigio in cui intensività di pixel (x, y) è memorizzato in float_array [larghezza y * + x] come valore float. Nelle immagini OpenCV le immagini vengono memorizzate come caratteri non firmati, quindi la semplice conversione di Mat :: data in float * non funzionerà. Devi convertire manualmente ogni valore in float:
Mat mat = imread("image_name.jpg", 0); // 0 stands for grayscale
vector<float> img;
for (int i = 0; i < mat.rows; ++i)
for (int j = 0; j < mat.cols; ++j)
img.push_back(mat.at<unsigned char>(i, j));
vl_dsift_process(dsift, &img[0]);
- 1. come convertire un cv opencv :: Mat in qimage
- 2. Come convertire CvMat * in cv :: Mat in OpenCV3.0
- 3. Come posso convertire un cv :: Mat in una scala di grigi in OpenCv?
- 4. OpenCV CV :: Mat ed Eigen :: Matrix
- 5. Come faccio a convertire da un CVPixelBufferRef a un cv OpenCV :: Mat
- 6. OpenCV VLFeat Chiamata di funzione Slic
- 7. OpenCV cv :: Mat 'ones' per matrice multicanale?
- 8. OpenCV std :: vector <cv :: Point2f> per cv :: Mat
- 9. Concatenate Mat in OpenCV
- 10. come convertire da cv :: Mat a CvArr?
- 11. Conversione tra cv :: Mat e arma :: mat
- 12. Come chiamare cv :: updateMotionHistory() in OpenCV
- 13. cv :: Mat mat, COME Ridurre le cifre a destra del punto decimale in cv :: Mat?
- 14. Aprire CV Mat generico intestazioni funzione
- 15. Converti trama OpenGL in OpenCV Mat
- 16. opencv: convertire scalare in float o double type
- 17. Come impostare un pixel su un valore in un oggetto cv :: Mat?
- 18. opencv: come salvare l'array float come immagine
- 19. Unisci più cv :: Mat?
- 20. Conversione di cv :: Mat in IplImage *
- 21. Conversione di 3x1 o 1x3 cv :: Mat to cv :: Point3d?
- 22. Come convertire un tipo di variabile Mat in un tipo di variabile IplImage in OpenCV 2.0?
- 23. OpenCV cv :: Mat to std: ifstream per la codifica base64
- 24. Come passare un OpenCV Mat in un grafico TENSorflow C++?
- 25. OpenCV resize non è un membro di cv (OpenCV Basics)
- 26. errore di danneggiamento dell'heap; impossibile rilasciare cv :: Mat opencv
- 27. convertire Mat per Bitmap Opencv per Android
- 28. Impostazione di profondità per un cv :: Mat
- 29. cv :: Mat.refcount Missing in OpenCV 3.0
- 30. Converti una riga di cv :: Mat in un
Può essere che questo problema sia legato al modo in cui una matrice viene passata da Matlab a C? –