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

uchar*到std::vector<uchar>然后返回?

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

    我有一些图像数据作为参考 uchar* . 我需要对它进行处理 std::vector<uchar>

    unsigned char* buffer = inputImg.data; //Image data from cv::Mat
    
        std::vector<uchar> vec;
        size_t size_of_buffer = sizeof(buffer);
        vec.assign(buffer, buffer + size_of_buffer);
    
        uchar* _compressed = reinterpret_cast<uchar*>(vec.data());
    

    当我用以下方式查看结果时:

        cv::Mat mat = cv::Mat(_height, _width, inputImg.type(), _compressed );
    

    编辑:

    根据以下评论,我已将代码更改为:

    //from Mat
        int COLOR_COMPONENTS = inputImg.channels();
        int _width = inputImg.cols;
        int _height = inputImg.rows;
    
        //to std::vector and back
        std::vector<uchar> vec;
        size_t size_of_buffer = _width * _height*COLOR_COMPONENTS;
    
        vec.assign(buffer, buffer + size_of_buffer);
        uchar* _compressed = reinterpret_cast<uchar*>(vec.data());
    

    如下面的答案所示,这是可行的。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Micka    6 年前

    此代码适用于我并正确显示图像:

    int main()
    {
        cv::Mat input = cv::imread("C:/StackOverflow/Input/Lenna.png");
        cv::Mat inputImg = input;
    
        int COLOR_COMPONENTS = inputImg.channels();
        int _width = inputImg.cols;
        int _height = inputImg.rows;
    
        //to std::vector and back
        std::vector<uchar> vec;
        size_t size_of_buffer = _width * _height*COLOR_COMPONENTS;
    
        unsigned char* buffer = inputImg.data;
    
        vec.assign(buffer, buffer + size_of_buffer);
        uchar* _compressed = reinterpret_cast<uchar*>(vec.data());
    
        cv::Mat mat = cv::Mat(_height, _width, inputImg.type(), _compressed);
    
        cv::imshow("output", mat);
        cv::waitKey(0);
        return 0;
    }
    

    带OpenCV 3.4的Visual Studio 2013

        2
  •  1
  •   Marc    6 年前

    sizeof(buffer)