我有一些與cv :: Mat對象的問題。下面的代碼的輸出是錯誤的const cv :: Mat類型的參數在函數中會改變嗎?
void processFrame(const cv::Mat image, MyTracker& t)
{
//some code
}
void main()
{
MyTracker t;
cv::VideoCapture(0);
cv::Mat im , im_gray;
while (true)
{
cap >> im;
cv::cvtColor(im, im_gray, CV_BGR2GRAY);
processFrame(im_gray,t);
cv::Rect r = t.bb_rot.boundingRect(); // get last bounding box of tracker
std::cout<<r.x<<"\t"<<r.y<<"\t"<<r.width<<"\t<<r.height;
}
}
但是當我使用processFrame(im_gray.clone(),t);
代替,解決了這個問題並且結果是正確的。 clone()
函數可以解決這個問題,但processFrame
的第一個參數是const cv::Mat image
,並且不能在ProcessFrame
中更改。
我認爲image
對象將在processFrame
功能改變
的墊頭是const的,但不是像素數據。 – Micka
[使用「const cv :: Mat&」,「cv :: Mat&」,「cv :: Mat」或「const cv :: Mat」作爲函數參數的差異的可能重複?](http:// stackoverflow問題/ 23468537 /使用const-cvmat -cvmat -cvmat-or-const-cvmat的差異) – herohuyongtao