Чтобы ответить на второй вопрос, особенно Сурьи:
ТЛ, документация по OpenCV не лучший. Ссылка на новый тип: cv :: Mat http://docs.opencv.org/2.4/modules/core/doc/basic_structures.html#mat Новые типы - это более современный C++, чем стиль c.
Вот два ответа более OpenCV форума с аналогичной темой: http://answers.opencv.org/question/65224/conversion-between-cvmat-and-cvmat/ и http://www.answers.opencv.org/question/13437/difference-between-cvmat-cvmat-cvmat-and-mat/
Специально для задачи преобразования (как указано juanchopanza):
cv::Mat mat = cv::Mat(10, 10, CV_32FC1); //CV_32FC1 equals float
//(reads 32bit floating-point 1 channel)
CvMat cvMat = mat;
или с
using namespace cv; //this should be in the beginning where you include
Mat mat = Mat(10, 10, CV_32FC1);
CvMat cvMat = mat;
Примечание. Обычно вы, вероятно, работаете с CvMat*
- но вы должны подумать о полностью переключении на более новые типы. Пример (взято из моей второй ссылки):
CvMat* A = cvCreateMat(10, 10, CV_32F); //guess this works fine with no channels too
Изменения Int плавать:
CvMat* A = cvCreateMat(10, 10, CV_16SC1);
//Feed A with data
CvMat* B = cvCreateMat(10, 10, CV_32FC1);
for(int i=0; i<10; ++i)
for(int i=0; i<10; ++i)
CV_MAT_ELEM(*A, float, i, j) = (float) cvmGet(B, i, j);
//Don't forget this unless you want to produce a memory leak.
cvReleaseMat(&A);
cvReleaseMat(&B);
Первые два примера (без указателя) отлично так как CvMat удерживается в куче, то , cvCreateMat(...)
выделяет память, которую вы должны освободить самостоятельно. Еще одна причина для использования cv::Mat
.
@ Спасибо, juanchopanza, Можете ли вы предоставить ссылку, связанную с вышеуказанными операциями. и как я могу преобразовать свои типы данных в CvMat. У меня есть данные в моем CvMat - целое число. Теперь мне нужно изменить это на float. Как я могу это сделать? – surya