【问题标题】:OpenCV how to encode raw image information for imencode?OpenCV如何为imencode编码原始图像信息?
【发布时间】:2019-05-29 18:38:40
【问题描述】:

我在 C++ 中。

假设某个神秘的函数getData() 返回图像的所有像素信息,但只返回图像的像素信息。

即char*,它只指向没有元数据的像素信息(没有宽度、长度、高度,也没有任何形式的通道)

因此我们有:

unsigned char *raw_data = getData();

然后我们有另一个函数,它返回一个包含元数据的结构。

例如:

struct Metadata {
    int width;
    int height;
    int channels;
    //other useful fields
}

我现在需要以正确的方式添加对象元数据以创建有效的图像缓冲区。

所以不是[pixel1, pixel2, pixel3 ...]

我会,例如[width, height, channels, pixel1, pixel2, pixel3...]

添加元数据的正确顺序是什么?宽度、高度和通道是否足够?

【问题讨论】:

  • 为cv::imencode?您不需要在任何地方添加任何内容,只需 construct a cv::Mat 包装像素缓冲区,并将其传递给函数。

标签: c++ image opencv memory-management


【解决方案1】:

您可以使用 Mat 构造函数从数据和元数据中创建图像

Mat::Mat(int rows, int cols, int type, void* data, size_t 步=AUTO_STEP); //documentation here

cv::Mat image = cv::Mat(height, width, CV_8UC3, raw_data);

type 参数指定通道数和数据格式。例如,典型的RGB图像数据为unsigned char,通道数为3,所以其类型=CV_8UC3

定义了可用的 OpenCV Mat 类型cvdef.h

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-25
    • 2018-11-22
    • 2013-09-12
    • 1970-01-01
    • 2022-01-13
    • 2019-08-14
    • 2021-02-03
    相关资源
    最近更新 更多