Uchar 到 cv::Mat 的向量
Posted
技术标签:
【中文标题】Uchar 到 cv::Mat 的向量【英文标题】:Vector of Uchar to cv::Mat 【发布时间】:2015-11-30 14:37:15 【问题描述】:我有一张图像,我将其放入 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并且它可以工作,但是我不知道如何将它变成一个图像。
【问题讨论】:
cv::Mat imgFromVector = cv::Mat(rows, cols, CV_8UC1, vector.data()).clone();
如果不想复制数据,可以省略 .clone。
【参考方案1】:
您可以使用以下方法将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();
【讨论】:
以上是关于Uchar 到 cv::Mat 的向量的主要内容,如果未能解决你的问题,请参考以下文章