复制的行为cv::Mat让我很困惑.
我从文档中了解到Mat::copyTo()深层复制,而赋值运算符则不是.我的问题:
我该怎么做才能cv::Mat从函数中返回一个,比如:cv::Mat func()?
根据文档,如果我返回cv::Mat它将没有用,因为在函数返回后该函数的本地副本cv::Mat将被销毁,因此接受函数外部返回值的那个应该指向一些随机地址.奇怪的是(大多数情况下)它正常工作.例如,以下工作:
cv::Mat CopyOneImage(const cv::Mat& orgImage)
{
cv::Mat image;
orgImage.copyTo(image);
return image;
}
int main()
{
std::string orgImgName("a.jpg");
cv::Mat orgImage;
orgImage = cv::imread(orgImgName);
cv::Mat aCopy;
aCopy = CopyOneImage(orgImage);
return 1;
}
Run Code Online (Sandbox Code Playgroud)但为什么?这不是一个深刻的副本.
问题3.有时,赋值运算符似乎也是深层复制:
int main()
{
std::string orgImgName("a.jpg");
cv::Mat orgImage;
orgImage = cv::imread(orgImgName);
cv::Mat aCopy;
orgImage.copyTo(aCopy);
cv::Mat copyCopy1;
copyCopy1 = aCopy;
cv::namedWindow("smallTest", 1);
cv::imshow("smallTest", copyCopy1);
uchar key = (uchar)cv::waitKey();
cv::Mat orgImage2 = cv::imread("b.jpg");
orgImage2.copyTo(aCopy);
cv::imshow("smallTest", …Run Code Online (Sandbox Code Playgroud)