Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Uchar到cv::Mat的向量_C++_Opencv_Vector - Fatal编程技术网

C++ Uchar到cv::Mat的向量

C++ Uchar到cv::Mat的向量,c++,opencv,vector,C++,Opencv,Vector,我有一个图像,我将其放入uchar向量中,我使用open-mpi从一个处理器发送到另一个处理器,但是我需要将uchar向量放入cv::Mat中 有没有一个简单的方法可以做到这一点 cv::Mat image_on_proc = newpopulation(cv::Rect(0, start, population.cols, rows_in_section)); std::vector<byte> img = matToBytes(image_on_proc); s

我有一个图像,我将其放入
uchar
向量中,我使用open-mpi从一个处理器发送到另一个处理器,但是我需要将
uchar
向量放入
cv::Mat

有没有一个简单的方法可以做到这一点

cv::Mat image_on_proc = newpopulation(cv::Rect(0, start, population.cols, rows_in_section));
    std::vector<byte> img = matToBytes(image_on_proc);

    std::vector<uchar> test;
    for(int i=0; i<image_on_proc.rows; i++)
    {
      for(int j=0; j<image_on_proc.cols; j++)
      {
    test.push_back(image_on_proc.at<uchar>(i,j));
      }
    }

    MPI_Barrier(MPI_COMM_WORLD);

    MPI_Send(&test[0],test.size()*sizeof(uchar), MPI_BYTE, 0, 99, MPI_COMM_WORLD);
cv::Mat image_on_proc=newpopulation(cv::Rect(0,start,population.cols,_部分中的行));
std::vector img=matToBytes(进程上的图像);
病媒试验;

对于(int i=0;i您可以使用以下方法将
Mat
存储到
向量中:

Mat img = ...; // img must be CV_8UC1 in this example
vector<uchar> v(img.begin<uchar>(), img.end<uchar>());
Mat img2(img.rows, img.cols, img.type(), v.data());
请注意,这里您不是在复制值,而是在
v
中为数据创建
Mat
头,因此
img2
将反映对
v
所做的任何更改。如果
v
超出范围,则
img2
将无效。您只需使用
clone()
复制数据,如:

Mat img3 = Mat(img.rows, img.cols, img.type(), v.data()).clone();

您可以使用以下方法将
Mat
存储到
向量中:

Mat img = ...; // img must be CV_8UC1 in this example
vector<uchar> v(img.begin<uchar>(), img.end<uchar>());
Mat img2(img.rows, img.cols, img.type(), v.data());
请注意,这里您不是在复制值,而是在
v
中为数据创建
Mat
头,因此
img2
将反映对
v
所做的任何更改。如果
v
超出范围,则
img2
将无效。您只需使用
clone()
复制数据,如:

Mat img3 = Mat(img.rows, img.cols, img.type(), v.data()).clone();

cv::Mat imgFromVector=cv::Mat(rows,cols,cv_8UC1,vector.data()).clone();
如果不想复制数据,可以省略.clone。
cv::Mat imgFromVector=cv::Mat(rows,cols,cv_8UC1,vector.data()).clone();
如果不想复制数据,可以省略.clone。