给定起始地址和大小访问内存中的图像

Access image in memory given starting address and size

所以我试图访问存储在计算机内存中的 jpg 图像数据,但我只能访问数据的起始地址和数据的大小。指向数据开头的指针是 uint8_t *,数据的大小是 uint32_t.

使用fwrite,我可以将数据写入jpg文件并正确显示,所以我知道数据是正确的并且存在。如何直接将 jpg 图像数据存储在变量中?最终,我也想将它存储在 opencv Mat 中。

我不确定要显示什么代码,所以如果您想查看其中的特定部分,请询问。

如果您有一个包含指向它的指针的 uint8_t * 类型的变量,您可以像访问数组一样访问它。

uint8_t* my_pointer;
int my_len;

for (int i = 0; i < my_len; ++i)
    cout << "The value of byte " << i
        << " of the data is " << my_pointer[i] << endl;

这个怎么样:

uint8_t *JPEG;
JPEG = malloc(sizeof(uint8_t) * size_var);
if(JPEG) {
  memcpy(JPEG, your_pointer, size_var);
}

但是,您已经拥有变量中的数据,因为您已经拥有指向它的指针。 :)

如果你真的想变得很花哨,你可以构建一个 struct 正确格式化 JPEG 的 header,然后将原始内存类型转换为结构以更好地操作它。

你知道图片的分辨率吗?如果是

将其存储在 opencv Mat 中你可以做到

cv::Mat buf = cv::Mat(height, width, CV_8U, buff_ptr);
cv::Mat img = cv::imdecode(buf, CV_LOAD_IMAGE_COLOR);