给定起始地址和大小访问内存中的图像
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);
所以我试图访问存储在计算机内存中的 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);