我正在創建一個cv :: Mat,並傳遞了我已經在外部分配的像素數據。如何將像素數據的所有權轉交給cv :: Mat
cv::Mat myMatrix(vImageResult.height,
vImageResult.width,
CV_8UC1,
vImageResult.data);
我希望cv :: Mat獲得字節的所有權(即創建一個refCount並在達到零時釋放字節)。然而documentation說
矩陣構造函數採取數據和步驟參數不分配矩陣數據。相反,他們只是初始化指向指定數據的矩陣頭,這意味着沒有數據被複制。此操作非常高效,可用於使用OpenCV函數處理外部數據。 外部數據不會自動釋放,所以您應該照顧它。
- 如果我立即釋放潛在的
vImageResult.data
,則我會得到一個壞的接入碰撞的地方下了線。 - 如果我沒有釋放底層的
vImageResult.data
,那麼數據會韭菜。
有沒有辦法通過所有權?
剛做'myMatrix = vImageResult'有什麼問題? – AldurDisciple
@AldurDisciple vImageResult可能不是cv :: Mat。這應該是「外部分配」的意思,這是我在寫答案時所設想的。 – anderas
我不認爲你可以這樣做,因爲Mat不知道你如何分配內存(malloc,new等),因此不知道如何釋放它。 – bitwise