是。
證明:
cv::Mat A = (cv::Mat_<double>(2,2) << 1.0, 2.0, 3.0, 4.0);
std::cout << "Original A:\n" << A << std::endl;
cv::Mat B = A;
B.at<double>(0, 1) = 2.5;
std::cout << "A:\n" << A << std::endl;
std::cout << "B:\n" << B << std::endl;
2.是。
證明:
void a_function(cv::Mat C)
{
C.at<double>(1, 0) = 3.5;
}
cv::Mat A = (cv::Mat_<double>(2,2) << 1.0, 2.0, 3.0, 4.0);
std::cout << "Original A:\n" << A << std::endl;
a_function(A);
std::cout << "A:\n" << A << std::endl;
3.當Mat
被指定爲函數參數具有或不基準&
,類使用智能指針內部,以指向原始數據而不是複製它。
證明:
void some_function(cv::Mat C)
{
C.at<double>(1, 0) = 3.5;
}
void another_function(cv::Mat& C)
{
C.at<double>(1, 0) = 3.6;
}
cv::Mat A = (cv::Mat_<double>(2,2) << 1.0, 2.0, 3.0, 4.0);
std::cout << "Original A:\n" << A << std::endl;
a_function(A);
std::cout << "A:\n" << A << std::endl;
cv::Mat B = (cv::Mat_<double>(2,2) << 1.0, 2.0, 3.0, 4.0);
std::cout << "Original B:\n" << B << std::endl;
a_function(B);
std::cout << "B:\n" << B << std::endl;
因爲在這種情況下使用&
不有所作爲,正如你指出的那樣,我相信使用就可以增強可讀性:人是不知道Mat
的內部工作可能會擔心,如果指定的參數沒有&
,則會進行復制。
4.這是一個味道的問題。我更喜歡const Mat& img
,因爲我認爲它對C/C++程序員來說更清晰和明顯。
並回答最後一個問題:
5.是。
證明:
cv::Mat L = (cv::Mat_<double>(1,3) << 0.0, 0.0, 0.0);
cv::Mat E = (cv::Mat_<double>(1,3) << 1.0, 2.0, 3.0);
cv::Mat F = (cv::Mat_<double>(1,3) << 4.0, 5.0, 6.0);
L = E.row(0).cross(F.row(0));
std::cout << "E:\n" << E << std::endl;
std::cout << "F:\n" << F << std::endl;
std::cout << "L:\n" << L << std::endl;