[英]Vector of Uchar to cv::Mat
我有一张要放入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);
上面显示了如何将图像放入向量中并发送,有一个相应的recv可以工作,但是我不知道如何将其转换回图像。
您可以使用以下方法将Mat
存储到vector<uchar>
中:
Mat img = ...; // img must be CV_8UC1 in this example
vector<uchar> v(img.begin<uchar>(), img.end<uchar>());
然后使用以下命令返回到Mat
中:
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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.