Cómo convertir un OpenCV cv::Mat
en un float*
que se puede alimentar en Vlfeat vl_dsift_process
? No puedo entender cómo funciona vl_dsift_process
en una matriz flotante unidimensional. Las muestras oficiales solo demuestran cómo usar la API de MatLab. Parece que no hay muestras sobre la API C, y la única pista es el archivo MEX en el paquete fuente.Cómo convertir un OpenCV cv :: Mat en un flotante * que se puede alimentar a Vlfeat vl_dsift_process?
Respuesta
float* matData = (float*)myMat.data;
Asegúrese de que la matriz no se elimina/sale del ámbito antes de terminar con el puntero a los datos. Y asegúrese de que la matriz contenga flotadores.
Se debe verificar que la matriz sea continua, de lo contrario no se puede interpretar como una matriz unidimensional. Y creo que es más apropiado usar 'reinterpret_cast' aquí ya que indica claramente la naturaleza peligrosa de este elenco. De todos modos, la extracción de DSIFT probablemente sería de varios órdenes de magnitud más lenta que la conversión de la matriz a 'vector
No puedo entender cómo funciona vl_dsift_process en una matriz de flotador unidimensional
DSIFT espera una imagen en escala de grises, donde cualquier intensidad de píxel (x, y) se almacena en float_array [anchura y * + x] como valor flotante. En OpenCV, las imágenes se almacenan como caracteres sin signo para que la simple conversión de Mat :: data a float * no funcione. Debe convertir manualmente todos los valores a flotación:
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. Convertir cv :: Mat a Magick :: Image
- 2. OpenCV std :: vector <cv :: Point2f> a cv :: Mat
- 3. cómo convertir un cc de opencv :: Mat a qimage
- 4. cómo convertir de cv :: Mat a CvArr?
- 5. Convertir la textura OpenGL a OpenCV Mat
- 6. Convirtiendo un archivo .mat de MATLAB en una matriz cv :: Mat en OpenCV
- 7. ¿Cómo puedo convertir un cv :: Mat en una escala de grises en OpenCv?
- 8. OpenCV cv :: Mat 'unos' para matriz multicanal?
- 9. NSImage a cv :: Mat y viceversa
- 10. Convertir datos de cv :: Mat en mxArray
- 11. Cómo llamar a cv :: updateMotionHistory() en OpenCV
- 12. Convirtiendo cv :: Mat a IplImage *
- 13. Mala dirección en cv :: Mat
- 14. ¿Cómo establecer un píxel a un valor en un objeto cv :: Mat?
- 15. Concatenate Mat en OpenCV
- 16. OpenCV C++, obteniendo Region of Interest (ROI) usando cv :: Mat
- 17. convertido cv :: Mat a const CvMat * o * CvMat
- 18. Merge multiple cv :: Mat?
- 19. error de corrupción de montón; no se puede liberar cv :: Mat opencv
- 20. opencv: convertir escalar a flotante o tipo doble
- 21. Conversión de opencv de un elemento Mat a IplImage *
- 22. Cómo convertir un tipo de variable Mat en un tipo de variable IplImage en OpenCV 2.0?
- 23. Convertir un byte arry en una imagen OpenCV en C++
- 24. Cómo iniciar correctamente un cv :: Mat puntero a una matriz de ceros (0) con
- 25. Convertir marco de vista previa de Android a OpenCV Mat
- 26. OpenCV 2.3: Convertir Mat a matriz de píxeles RGBA
- 27. convertir los puntos clave en mat o guardarlos en el archivo de texto opencv
- 28. OpenCV elemento de acceso desde Mat
- 29. Cómo mostrar OpenCV Mat en MFC View
- 30. OpenCV Mat CV_32FC1
¿Puede ser que este problema esté relacionado con la forma en que se pasa una matriz de Matlab a C? –