我有一个构成图像的像素数据数组。数据格式为:
vector<FColor> ColorBuffer;
其中FColor是这样的结构:
struct FColor
{
uint8 B;
uint8 G;
uint8 R;
uint8 A;
};
我有图像尺寸(宽度,高度)。
我需要做的是将此数据转换为cv :: Mat。
我正在尝试:
cv::Mat tester = cv::Mat(Width, Height, CV_8UC3);
for (int i = 0; i < Width; i++)
{
for (int j = 0; j < Height; j++)
{
cv::Vec3d px(ColorBuffer[i + j].B, ColorBuffer[i + j].G, ColorBuffer[i + j].R);
tester.at<cv::Vec3d>(j, i) = px;
}
}
但这给了我一个混乱的形象。我在哪里错了?我是否应该使用其他东西代替cv::Vec3d
?还是我的逻辑有误?
答案 0 :(得分:1)
ColorBuffer
内某个点的索引似乎不正确,而不是
ColorBuffer[i + j]
您应该使用类似
ColorBuffer[i + j*Width]