#include <iostream>
#include <opencv2/core/core.hpp>
int main() {
cv::Mat a = (cv::Mat_<int>(1, 3) << 1, 2, 3);
cv::Mat b = cv::Mat::zeros(1, 3, CV_32S); // int
for (int i = 0; i < 3; i++) {
// case 1
a.col(i).copyTo(b.col(i));
// 输出结果:a: 1 2 3, b: 1 2 3
// // case 2
// a.col(i) = b.col(i).clone();
// // 输出结果:a: 1 2 3, b: 0 0 0
//
// // case 3
// b.col(i) = a.col(i);
// // 输出结果:a: 1 2 3, b: 0 0 0
//
//
// // case 4
// b.at<int>(0, i) = a.at<int>(0, i);
// // 输出结果:a: 1 2 3, b: 1 2 3
}
std::cout << "a:" << std::endl;
for (int i = 0; i < 3; i++) {
std::cout << a.at<int>(0, i) << '\t';
}
std::cout << std::endl << "b:" << std::endl;
for (int i = 0; i < 3; i++) {
std::cout << b.at<int>(0, i) << '\t';
}
return 0;
}
case2和case3的赋值失败,原因应该是cv::col的函数后加了const,无法对等号左边cv::col返回的类Mat进行修改,所以b的值没变。
inline
Mat Mat::col(int x) const
{
return Mat(*this, Range::all(), Range(x, x + 1));
}