方法一(适用于OpenCV3):
-
- #include <opencv2/opencv.hpp>
- #include <opencv2/imgproc/imgproc_c.h>
- #include <iostream>
- char * lpFileBuf = GetFileBuf("girl.bmp");
- CvMat mCvmat = cvMat(512*3, 768*3, CV_8UC1, lpFileBuf);
- IplImage*IpImg = cvDecodeImage(&mCvmat, 1);
- //opencv 2.0 CvMat->Mat数据转换 //Mat b = Mat(mat,true);
- //opencv3.0 CvMat->Mat数据转换 //Mat image = cvarrToMat(pp);
- Mat image = cvarrToMat(IpImg).clone();
- cvReleaseImage(&IpImg);
- imshow("123", image);
方法二(适用于OpenCV4):
-
- #include <opencv2/opencv.hpp>
- cv::_InputArray pic_arr(bmpFileBuf, nBmpBufSize);
- cv::Mat src_mat = cv::imdecode(pic_arr, cv::IMREAD_UNCHANGED);
- cv::imshow("123", src_mat);
opencv从内存中读取图片可以大大减少读取文件所消耗的时间。
CvMat中的data数据只是矩阵数据的首地址,分配的内存大小为行列乘积。对该内存块的操作需要调用函数,也可以使用指针索引。
找到了 opencv加载内存中的图片数据的方法,现在记录下来。
//参数分别为 图片宽度,高度,类型,图片数据指针(unsigned char*) //这个构造函数并没有从新分配内存 CvMat mCvmat = cvMat(w, h, CV_8UC1, mImgData); IplImage* IpImg = cvDecodeImage(&mCvmat, 1); //opencv3.0 IplImage到Mat类型的转换的方法 Mat image = cvarrToMat(IpImg); if (!image.data) { return false; } cvReleaseImage(&IpImg);
标签:CvMat,Mat,image,cv,OpenCV,内存,IpImg,读取 From: https://www.cnblogs.com/lidabo/p/17648485.html