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。