将无符号字符指针数组转换为OpenCV矩阵

8
我已经接近成功,但仍然无法完全理解如何转换。
unsigned char ** to a cv::Mat

我知道cv::Mat中的.data部分是uchar*类型。我使用的函数返回一个图像,其形式为...
unsigned char ** output;

但是我的其余代码使用的是cv::Mat。我也没有正在使用的库的源代码,因此不知道它在做什么。

编辑 谢谢大家的帮助,我已经完成了这个...

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

但是图片是黑色的,所以现在我需要找出是否实际上有任何东西。

抱歉研究不足,我时间很紧迫,这不是作业,我正在努力准备一些结果向教授展示!


2
你知道你返回的双指针的宽度和高度吗? - sgarizvi
2个回答

11
你需要使用Mat构造函数并提供数据指针:
 // 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*,然后再使用它。


谢谢,我已经尝试解决了。请查看编辑以获取下一个问题。 - YMDW
1
@Oliver9523,输入数据(void**)的格式是什么?如果它是指向图像数据的二维数组的指针,则应将其转换为一维数组。 - ArtemStorozhuk
我假设这是一个二维数组,谢谢。我会尝试将其转换一下。 - YMDW
1
+1 对 Astor 评论的赞同:如果您的数据是一个二维数组,您必须预先分配您的 cv::Mat,并逐行复制数据。 - remi

1
也许你应该在代码中删除 *
cv::Mat TempMat = cv::Mat(h, w, CV_8UC1, *output);

make it just like this:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接