#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
void test1()
{
int h = 2;
int w = 3;
cv::Mat im1(h, w, CV_8UC3, cv::Scalar(0, 0, 0));
cv::Mat im2(h, w, CV_8UC3, cv::Scalar(0, 0, 0));
for (int k = 0; k < 3; k++)
{
// im1 accumulate some val
vector<uchar> pixs;
for (int i = 0; i < im1.rows; i++)
{
for (int j = 0; j < im1.cols; j++)
{
im1.at<cv::Vec3b>(i, j)[0] += 10.;
im1.at<cv::Vec3b>(i, j)[1] += 30.;
pixs.push_back(im1.at<cv::Vec3b>(i, j)[0]);
pixs.push_back(im1.at<cv::Vec3b>(i, j)[1]);
pixs.push_back(im1.at<cv::Vec3b>(i, j)[2]);
}
}
// reshape pixs array to Mat im2
for (int i = 0; i < im1.rows; i++)
{
for (int j = 0; j < im1.cols; j++)
{
for (int k = 0; k < 3; ++k)
{
int g = i * im1.cols * im1.channels() + j * im1.channels() + k;
im2.at<cv::Vec3b>(i, j)[k] = pixs[g];
}
}
}
// cout << im1 << endl;
cout << 11111111111 << endl;
cout << im2 << endl;
}
}
int main()
{
test1();
return 1;
}
结果:
11111111111
[ 10, 30, 0, 10, 30, 0, 10, 30, 0;
10, 30, 0, 10, 30, 0, 10, 30, 0]
11111111111
[ 20, 60, 0, 20, 60, 0, 20, 60, 0;
20, 60, 0, 20, 60, 0, 20, 60, 0]
11111111111
[ 30, 90, 0, 30, 90, 0, 30, 90, 0;
30, 90, 0, 30, 90, 0, 30, 90, 0]