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 数组