【发布时间】:2018-12-01 00:15:47
【问题描述】:
我正在寻找在 C++ 中展平结构数组的最有效方法,以便将展平的一维数组数据作为输入传递给 cv::Mat。该结构如下所示:
struct Color3
{
uint8_t red, green, blue;
}
我的代码如下所示:
// Update color frame
cv::Mat colorMat = cv::Mat::zeros(cv::Size(1920, 1080), CV_8UC3)
const Color3* colorPtr = colorFrame->getData(); // Get Frame from Library
std::vector<uchar> vecColorData;
data.reserve(1920 * 1080 * 3);
for (int i = 0; i < 1920 * 1080; ++i)
{
auto color = *colorPtr;
vecColorData.push_back(color.red);
vecColorData.push_back(color.green);
vecColorData.push_back(color.blue);
vecColorData++;
}
colorMat.data = vecColorData.data();
有没有比创建中间std::vector 并循环整个数组更有效的方法?我想我正在寻找类似的东西:
colorMat.data = colorFrame->getData()
但是,我收到以下错误:Color3* 类型的值无法分配给 uchar* 类型的实体。
【问题讨论】:
-
data.reserve(1920 * 1080 * 3);你是说 colorMat.data.reserve 吗?