代码之家  ›  专栏  ›  技术社区  ›  anti

openCv,从BGR数据向量创建一个Mat?

  •  0
  • anti  · 技术社区  · 6 年前

    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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Anton Malyshev    6 年前

    内部点的索引 ColorBuffer 似乎不正确,而不是

    ColorBuffer[i + j]
    

    你应该用

    ColorBuffer[i + j*Width]