OpenCV - 如何从 uint8_t 指针创建 Mat

2023-11-22

我有以下 C++ 代码:

void foo(const uint8_t* data, int height, int width) {
  // need to create a cv::Mat from *data, which is a pointer to grayscale image data

  // doesn't work correctly (compiles, but array access on the mat leads to a segmentation fault)
  auto img = cv::Mat(height, width, CV_8UC1, &data);

  // how can I fix the line above to create a proper cv::Mat?
}

// I'm calling foo like this
// img is a grayscale image
foo(img.ptr<uint8_t>(0), img.cols, img.rows);

谁能指出我在 foo 内部创建矩阵的语法有什么问题吗?


在本页cv::Mat 类参考,我们可以找到cv::Mat构造函数如下:

///! 2017.10.05 09:31:00 CST
/// cv::Mat public construction

Mat ()
Mat (int rows, int cols, int type)
Mat (Size size, int type)
Mat (int rows, int cols, int type, const Scalar &s)
Mat (Size size, int type, const Scalar &s)
Mat (int ndims, const int *sizes, int type)
Mat (int ndims, const int *sizes, int type, const Scalar &s)
Mat (const Mat &m)
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)
Mat (int ndims, const int *sizes, int type, void *data, const size_t *steps=0)
Mat (const Mat &m, const Range &rowRange, const Range &colRange=Range::all())
Mat (const Mat &m, const Rect &roi)
Mat (const Mat &m, const Range *ranges)

创造cv::Mat from uint8_t pointer,我们可以使用这两个函数:

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)

这是我的实验:

///! 2017.10.05 09:40:33 CST
/// convert uint8_t array/pointer to cv::Mat

#include <opencv2/core.hpp>
#include <iostream>

int main(){        
    uint8_t uarr[] = {1,2,3,4,5,6,7,8,9,10,11,12};
    int rows = 2;
    int cols = 2;
    cv::Size sz(cols,rows);

    cv::Mat mat1(sz,CV_8UC3, uarr);
    cv::Mat mat2(rows, cols, CV_8UC3, uarr);

    std::cout<< "mat1: \n"<<mat1 << "\n\nmat2:\n" << mat2 << std::endl;
    return 0;
}

预期结果:

mat1: 
[  1,   2,   3,   4,   5,   6;
   7,   8,   9,  10,  11,  12]

mat2:
[  1,   2,   3,   4,   5,   6;
   7,   8,   9,  10,  11,  12]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV - 如何从 uint8_t 指针创建 Mat 的相关文章

随机推荐

  • 如何在不锁定数据库的情况下使用数据读取器执行 SQLite 查询?

    我正在使用 System Data Sqlite 在 C 中访问 SQLite 数据库 我有一个查询必须读取表中的行 在迭代行和读取器打开时 必须执行某些 SQL 更新 我遇到了 数据库已锁定 异常 The SQLite 文档 states
  • 赋值使指针来自整数而不进行强制转换

    我有 Java 背景 正在学习 C 但我发现那些模糊的编译器错误消息越来越令人沮丧 这是我的代码 PURPOSE Do case insensetive string comparison include
  • 将错误从服务层传递回视图

    Edit 我研究过 Spring 3 ExceptionHandler注释并将其与Option 1下面看起来是一个非常干净的解决方案 See http static springsource org spring docs 3 0 x sp
  • “uncap”一个有上限的 MongoDB 集合

    有没有办法 取消 上限集合 创建新集合并复制数据对我来说不是一个选择 thanks 不 您可以使用 convertToCapped 命令将非上限集合转换为上限集合 但没有其他方法 您唯一的选择是将集合克隆为非上限集合并重命名 这显然会涉及停
  • Python 多个 for 循环

    我想知道下面代码中的3个for循环是否可以用更好的方式编写 Nc 10 number of points for 0 pi cc1 linspace 0 pi Nc cc2 linspace 0 pi 2 Nc 2 cc3 linspace
  • 将 ID 分配给 Android ListView 中的行

    我有一个列表视图 当点击 ListView 上的某个项目时 它会加载一个 SubView 我想为 ListView 的每一行分配一个 ID 这样我就可以将该 ID 传递给 SubView 如何为 ListView 中的每一行分配特定的 ID
  • 如何将子存储库添加到 Mercurial 中的现有存储库中

    将现有存储库作为子存储库添加到另一个现有存储库的最佳 最简单方法是什么 或者甚至可能 情况是我有一个现有的 主 项目 我想在其中包含一个库项目 以便我可以从主项目编辑库项目 并在提交主项目时将更改提交到库项目 另外 我是否需要克隆 推 拉到
  • 更改运行时权限的语言

    如何更改android运行时权限的语言 当我尝试使用更改语言时 Configuration config getBaseContext getResources getConfiguration locale new Locale lang
  • iPhoneSDK从CATransform3D计算旋转角度

    如何通过将 CATransform3D 结构作为输入来计算绕 Z 轴的弧度旋转 基本上我需要的是相反的CATransform3DMakeRotation 这取决于您在哪个轴上进行旋转 绕 z 轴的旋转表示为 a angle in radia
  • Teamcity - 哪个外部差异查看器

    您知道有哪些工具可以用作 Teamcity 的 Visual Studio 插件的外部差异查看器吗 我正在使用 Visual Studio 2010 Pro 和 Teamcity 5 1 2 We use 超越比较3与 TeamCity 插
  • 谷歌文本转语音 API

    我想知道如何在我的 NET 项目中使用 Google Text to Speech API 我认为我需要调用一个 URL 来使用 Web 服务 但我的想法并不清楚 有人可以帮忙吗 旧答案 尝试使用此网址 它将自动生成一个 wav 文件 您可
  • Go:跟踪 POST 请求进度

    我正在 Go 中为 Linux 编写一个 ShareX 克隆 它通过 http POST 请求将文件和图像上传到文件共享服务 我目前正在使用 http Client 和 Do 发送我的请求 但我希望能够跟踪需要最多一分钟上传的较大文件的上传
  • 为什么 Scala 找不到 org.apache.commons.lang 包?

    我想用org apache commons lang NotImplementedException因为它似乎是 Java Scala 域中唯一的 NotImplementedException 实现 我记得我曾经在 Scala 2 8 1
  • NSTextField 像 safari 地址栏

    构建像 Safari 中那样的地址字段的最佳方法是什么 需要有可编辑的文本和确定的进度指示器背景 你可以直接子类化NSTextField并覆盖 drawRect 方法用某种颜色或渐变 或其他 来 填充 整个宽度的适当百分比以用于进度 如果我
  • 局部变量作用域的问题。怎么解决呢?

    我在尝试执行时收到以下错误statemet executeUpdate 在我的代码中 Local variable statement defined in an enclosing scope must be final or effec
  • 从 grails 2.3.8 2.4 升级时出现资源插件错误

    我正在关注docs尝试将我的项目从 2 3 8 升级到 2 4 但我遇到了这些错误 localhost startStop 1 ERROR resource ResourceProcessor Unable to load resource
  • 链接外部文件时列出属性的顺序是否正确?

    在 HTML 中声明外部文件 例如 css 或 js 时 是否存在放置链接属性的正确顺序 例如 or or 这有关系吗 同样的问题也适用于链接到外部 JavaScript 文件的属性 谢谢你的时间 不 属性顺序无关
  • CSS无限旋转动画

    我想通过 CSS 旋转我的加载图标 我有一个图标和以下代码 div div
  • COPY 命令:仅从 csv 复制特定列

    我有一个关于COPYPostgreSQL 中的命令 我有一个 CSV 文件 我只想将其中一些列值复制到我的 PostgreSQL 表中 是否有可能做到这一点 我熟悉使用COPY命令使用标题将 CSV 中的所有数据复制到表中以映射到列名称 但
  • OpenCV - 如何从 uint8_t 指针创建 Mat

    我有以下 C 代码 void foo const uint8 t data int height int width need to create a cv Mat from data which is a pointer to grays