使用opencv将像素数据分配到向量中

allocating pixel data into a vector using opencv

我有一个 3D 矢量,许多 images.I 正在尝试将图像的像素数据保存到这个矢量中。第一个参数包含图像在集合中的顺序号,接下来的两个参数应包含 (x,y) 位置的像素数据。考虑到我写了下面的代码:-

Mat out;// out has an image in it
vector <vector< vector< int> >>  Input_bin;
Input_bin.push_back(vector<vector<int>>(inst_num));// the order number  

for (int i = 0; i <= out.cols; i++)
{

    for (int j = 0; j <= out.rows; j++)
    {
         Input_bin[inst_num].push_back(vector<int>(out.at<int>(i,0)));
         Input_bin[inst_num][out.at<int>(i,0)].push_back(out.at<int>(0,j));
    }
}

但是我收到一个错误:

OpenCV Error: Assertion failed (dims <= 2 && data && (unsigned)i0 < (unsigned)si ze.p[0] && (unsigned)(i1 * DataType<_Tp>::channels) < (unsigned)(size.p[1] * cha nnels()) && ((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3) - 1))*4) & 15) == elemSize1()) in cv::Mat::at, file C:\opencv_3\opencv\bui ld\include\opencv2/core/mat.inl.hpp, line 894

我什至无法尝试在 cmd 屏幕上打印矢量结果。有什么建议吗?

编辑 2- 我尝试了另一个代码,将 input_bin 向量设为二维和浮点数据类型

for (int i = 0; i <= out.cols; i++)
{

    for (int j = 0; j <= out.rows; j++)
    {
        Input_bin[inst_num][out.at<float>(i, j)];
  }}

还是一样的错误

假设你的图像是CV_8UC1类型,即int的单通道矩阵,你可以在你的数据结构中存储一组图像,如下所示:

// Your set of images of type CV_8UC1
vector<Mat> set_of_images; 
// How many images?
size_t n_images = set_of_images.size();

// Data structure
vector<vector<vector<uchar>>> input(n_images);

// For each image in the set
for(size_t i=0; i<n_images; ++i)
{
    // Get the corresponding Mat
    const Mat& img = set_of_images[i];

    // Allocate the vectors
    vector<vector<uchar>> vimg(img.rows, vector<uchar>(img.cols));

    // Copy all values from Mat to vimg
    for(int r = 0; r < img.rows; ++r)
    {
        for(int c = 0; c < img.cols; ++c)
        {
            vimg[r][c] = img.at<uchar>(r,c);
        }
    }
    // Copy vimg into the data structure
    input[i] = vimg;
}

请注意,如果您知道集中的所有图像都具有相同的大小,则可以避免一些数据副本。

此外,图像通常存储在连续存储器中。因此,您最好为每个图像使用一个 vector<uchar>,大小为 img.rows * img.cols,并使用索引而不是 (row, col).

访问它