方法一(适用于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);