gpt4 book ai didi

c++ - uchar* 到 std::vector 并返回?

转载 作者:行者123 更新时间:2023-11-28 01:29:18 31 4
gpt4 key购买 nike

我有一些图像数据作为 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());

如以下答案所示,这是有效的。

最佳答案

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

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

关于c++ - uchar* 到 std::vector<uchar> 并返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52311361/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com