内存管理对于图像类来说是至关重要的。在OpenCV中,图像类是cv::Mat
,它具有精细的内存管理方案。假设我已经有自己的图像类SelfImage
:
class SelfImage
{
public:
int width_;
int height_;
unsigned char *pPixel_;
};
一开始,我将把所有图像像素内容放入这个类:
SelfImage myImage;
myImage.width_ = 300;
myImage.height_ = 200;
myImage.pPixel_ = new [300*200];
for(int i=0; i<300*200; i++)
myImage.pPixel_[i] = i%200;
那么我的问题是如何以非常高效的方式将这个类转换为 cv::Mat
,我有一个解决方案:
cv::Mat mat;
mat.create( myImage.height_, myImage.width_, CV_8UC1);
mat.data = myImage.pPixel_;
我不确定这是否是一个好的解决方案。如果
cv::Mat::create
函数也会分配内存,那么上述代码存在内存泄漏的危险。有什么想法吗?编辑: 我必须明确表示,如果我可以使用
cv::Mat::create
方法但与SelfImage
类共享内存将会很好。原因是已定义一个函数来执行图像类转换工作:void TransImageType(const SelfImage &geo_img, cv::Mat &mat)
。
cv::Mat::create
方法并与SelfImage
类共享内存,那将是很好的。 - feelfreemat = cv::Mat(geo_img.height_, geo_img.width_, CV_8U, geo_img.pPixel_);
呢? - BConiccv::Mat
的头文件被复制(行、列、类型等),底层像素数据是相同的。 - BConic