內存管理對於圖像類是至關重要的。在opencv中,映像類是cv::Mat
,它具有精巧的內存管理方案。假設我已經有我自己的形象類SelfImage
:Opencv Mat內存管理
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
class.The原因的內存是一個函數定義爲perfom圖像類轉換作業void TransImageType(const SelfImage &geo_img, cv::Mat &mat)
;
我必須說清楚,如果我可以使用'cv :: Mat :: create'方法但是與'SelfImage'類共享內存。 – feelfree
我不認爲這是可能的...看到[相關的問題](http://stackoverflow.com/questions/22511747/how-do-i-pass-ownership-of-pixel-data-to-cvmat) 。爲什麼你不能使用該構造函數? – AldurDisciple
謝謝,原因是一個函數被定義爲執行圖像類的轉換作業void TransImageType(const SelfImage&geo_img,cv :: Mat &mat); – feelfree