【问题标题】:unsigned char ** to opencv matunsigned char ** 到 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);

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

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

【问题讨论】:

  • 你知道你返回的双指针的宽高吗?

标签: c++ image-processing opencv double-pointer


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多