unsigned char ** 到 opencv mat

Posted

技术标签:

【中文标题】unsigned char ** 到 opencv mat【英文标题】:unsigned char ** to opencv mat 【发布时间】:2012-11-06 16:40:08 【问题描述】:

我快到了,但我不太明白如何转换

unsigned char ** to a cv::Mat

我知道 cv::Mat 的 .data 部分是 uchar*

我正在使用一个函数,它以...的形式返回和图像

unsigned char ** output;

但我的其余代码使用 cv::Mat's。我也没有我正在使用的库的源代码,所以我真的不知道它在做什么。

编辑 谢谢大家的帮助,我已经做到了……

cv::Mat TempMat = cv::Mat(h, w, CV_8UC1, *output);
imshow("this is a test",TempMat);

但图像是黑色的,所以我现在需要确定那里是否真的有任何东西。

抱歉,我的截止日期很紧,不,这不是家庭作业,试图准备一些东西来向教授展示结果!

【问题讨论】:

你知道你返回的双指针的宽高吗? 【参考方案1】:

您必须使用 Mat constructor 和指向数据的指针:

 // constructor for matrix headers pointing to user-allocated data
    Mat(int _rows, int _cols, int _type, void* _data, size_t _step=AUTO_STEP);
    Mat(Size _size, int _type, void* _data, size_t _step=AUTO_STEP);

您必须将 void** 转换为 void* 并在此之后使用它。

【讨论】:

谢谢,我已经尝试过了。查看下一个问题的编辑 @Oliver9523 输入数据的格式是什么(void**)?如果它是指向图像数据的二维数组的指针,则应将其转换为一维。 我假设它是一个二维数组,谢谢。我会看看转换它。 +1 for Astor 评论:如果您的数据是二维数组,则必须预先分配 cv::Mat 并逐行复制数据。【参考方案2】:

也许你应该删除*

cv::Mat TempMat = cv::Mat(h, w, CV_8UC1, *output);

让它像这样:

cv::Mat TempMat = cv::Mat(h, w, CV_8UC1, output);

【讨论】:

以上是关于unsigned char ** 到 opencv mat的主要内容,如果未能解决你的问题,请参考以下文章

opencv 中的 Mat_<unsigned char> - Mat 数据类型

在C++中,浮点型数据(float型)向uchar(unsigned char)强制类型转换是一种什么样的结果?

将 unsigned char * 复制到 unsigned char*

unsigned char 到 8 个原始位的 unsigned char 数组

C: unsigned char * bytes 数组将元素复制到其他 unsigned char * 数组

用cout输出uchar(unsigned char)变量时,没有输出结果怎么办?