将 OpenCV 矩阵循环转换为 JavaCV

2023-12-20

不久前得到了 O'Reilly 的《学习 OpenCV》一书,从那时起,我一直忙于将我看到的所有示例代码从 OpenCV 转换为 JavaCV,通常还会进行一些我自己的修改。一直以来,我都试图尽可能保持纯 OpenCV(C 语言)代码并避免使用 Java。例如,我直接通过JavaCV中的OpenCV highgui包实现了所有界面元素,而不是通过Java Swing。通过这样做,我希望能够在相对较短的时间内学习 OpenCV 库和一些 C 语言,并建立一个有用的函数库,如果我决定稍后切换到纯 OpenCV,我将能够轻松地将其转换为 C 语言。

无论如何,我对 C 的了解很少,有时在处理指针时会遇到麻烦。本书推荐以下代码作为迭代 3 通道矩阵的最佳方法:

float sum( const CvMat* mat ) {
    float s = 0.0f;
    for(int row=0; row<mat->rows; row++ ) {
        const float* ptr = (const float*)(mat->data.ptr + row * mat->step);
        for( col=0; col<mat->cols; col++ ) {
            s += *ptr++;
        }
    }
    return( s );
}

以下是该代码的解释:

当计算矩阵中的指针时,请记住矩阵元素数据 是一个联盟。因此,当取消引用该指针时,必须指示正确的 联合的元素以获得正确的指针类型。然后,为了抵消 指针,必须使用矩阵的步骤元素。如前所述,该步骤 元素以字节为单位。为了安全起见,最好以字节为单位进行指针算术,然后转换为适当的类型,在本例中为 float。尽管 CVMat 结构具有高度和宽度的概念以与旧的 IplImage 结构兼容,但我们还是使用更新的行和列。最后,请注意,我们为 > 每一行重新计算 ptr,而不是简单地从开头开始,然后递增该指针 每次阅读。这可能看起来有些过分,但因为 CvMat 数据指针可以 指向较大数组中的 ROI,无法保证数据在行之间连续。

但是我在将其转换为 JavaCV 时遇到问题。 ptr 字段(指针)似乎是一个浮点数,这让我感到困惑。我认为它实际上不是一个“指针”,而是一个每个像素值相加的值?或者它实际上是一个指针,s 值可以找到给定行中所有列的总和?

不管怎样,如果有人为我发布一些等效循环的 JavaCV 代码,我将不胜感激。我知道还有其他方法可以访问 CvMat 中的每个像素,但据我所知,它们都效率较低或不准确。


您提供的特定示例将被最佳地转换为 Java 作为

float sum(CvMat mat) {
    final int rows = mat.rows();
    final int cols = mat.cols();
    final int step = mat.step()/4;
    FloatBuffer buf = mat.getFloatBuffer();
    float s = 0.0f;
    for (int row = 0; row < rows; row++) {
        buf.position(row * step);
        for (int col = 0; col< cols; col++) {
            s += buf.get();
        }
    }
    return s;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 OpenCV 矩阵循环转换为 JavaCV 的相关文章

  • 改变for循环的顺序?

    我遇到一种情况 我需要根据用户输入以不同的顺序循环遍历 xyz 坐标 所以我是 3D 空间中的一个区域 然后是一组像这样的 for 循环 for int x 0 x lt build getWidth x for int y 0 y lt
  • Json.NET - 反序列化接口属性引发错误“类型是接口或抽象类,无法实例化”

    我有一个类 其属性是接口 public class Foo public int Number get set public ISomething Thing get set 尝试反序列化Foo使用 Json NET 的类给我一条错误消息
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • Hibernate HQL:将对值作为 IN 子句中的参数传递

    我面临一个问题 如何使用 IN 子句将查询中的成对值的参数传递给 HQL 例如 select id name from ABC where id reg date in x y 并且参数是不同的数据类型string id 和reg date
  • 在 ASP.NET Core 3.1 中使用包含“System.Web.HttpContext”的旧项目

    我们有一些用 Net Framework编写的遗留项目 应该由由ASP NET Core3 1编写的API项目使用 问题是这些遗留项目正在使用 System Web HttpContext 您知道它不再存在于 net core 中 现在我们
  • 从路径中获取文件夹名称

    我有一些路c server folderName1 another name something another folder 我如何从那里提取最后一个文件夹名称 我尝试了几件事 但没有成功 我只是不想寻找最后的 然后就去休息了 Thank
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • Java:由 HTTP 连接创建的等待连接线程存活时间很长

    我有一个服务器端代码 用于检查 SOAP 服务是否已启动 代码如下 String response while response length 0 try final URL url new URL DummySoapServiceURL
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table
  • 将 unsigned char * (uint8_t *) 转换为 const char *

    我有一个带有 uint8 t 参数的函数 uint8 t ihex decode uint8 t in size t len uint8 t out uint8 t i hn ln for i 0 i lt len i 2 hn in i
  • 春季 CORS。在允许的来源中添加模式

    查看CORS的弹簧指南 以下代码启用所有允许的来源 public class MyWebMVCConfigurer extends WebMvcConfigurerAdapter Override public void addCorsMa
  • 防止Java实例化的正确方法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • Java:使用 Graph API 在线更新 Sharepoint 上的 docx 文件

    我在使用 Java 在线更新 Sharepoint 上的 docx 文件时遇到问题 首先 我检查了构建 PUT 请求的 URL 此处 并使用此请求 PUT drives drive id items item id content 我首先使
  • 为什么应该首选 Java 类的接口?

    PMD https pmd github io 将举报以下违规行为 ArrayList list new ArrayList 违规行为是 避免使用 ArrayList 等实现类型 而是使用接口 以下行将纠正违规行为 List list ne
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • 如何让Gtk+窗口背景透明?

    我想让 Gtk 窗口的背景透明 以便只有窗口中的小部件可见 我找到了一些教程 http mikehearn wordpress com 2006 03 26 gtk windows with alpha channels https web
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver

随机推荐

  • 根据条件禁用输入

    大家好我有以下代码 table class details table tr td class details property attribute AttributeLabel td td div div td tr table
  • 防止 ggplot2 图例重新排序标签

    我有一个列 类别 它是按特定顺序分解的 它应该在图例中拼写 顺序 对于绘图 我为每一层使用不同的数据子集 将图例数据重新合并在一起时 因子的顺序会发生变化 关于如何防止这种重新排序有什么想法吗 library ggplot2 library
  • 如果可能的话,如何将MUI与Qwik框架一起使用?

    我尝试了 Qwik 框架 它看起来很像 Reactjs 并且使用 jsx 突然 我想知道 MUI 等 Reactjs 库是否可以与 Qwik 框架一起使用 我尝试了这段代码 import component from builder io
  • 根据输入输出数据估计传递函数

    我有一个从 NI DAQ 获得的两列数据矩阵 第一列是电动发电机组 带驱动器 的输出数据 第二列是输入数据 方波 我想使用找到传递函数tfest没有 Simulink 是否可以 我有系统识别工具箱 如何将 mat 文件附加到这篇文章 我的要
  • 在访问 SQL 查询中禁用括号

    有没有办法告诉 ms access 2003 not将连接放入括号中 或者至少在没有 所有其他数据库都这样做 的情况下理解它们 我想要类似的东西 SELECT FROM a INNER JOIN b ON a a b a INNER JOI
  • Bootstrap 工具提示导致按钮跳转

    当我将鼠标悬停在按钮上并出现工具提示时 按钮会跳跃 如果我禁用工具提示 它不会跳转 此外 右侧按钮失去了圆角边缘 我怎样才能防止这种情况发生 div class btn group a class btn href i class icon
  • 如何在 Scala 中向 Swing 组件添加监听器?

    我正在尝试在魔方 Scala 应用程序中实现 MVC 设计模式 在 Java 中 我会通过添加一个ActionListener到控制器类中具有侦听器的按钮 在 Scala 中 我发现这非常困难 谁能给我一些如何做到这一点的例子 当然 您可以
  • 在 Windows 窗体设计器中加载窗体时出现“找不到类型”错误

    我有一个 NET 2 0 windows 窗体应用程序 它大量使用ListView控制 我已经子类化了ListView类变成模板化的SortableListView
  • NodeJS — 使用函数字符串而不是文件来分叉子进程

    我看过文档 https nodejs org api child process html child process child process fork modulepath args options对于fork方法 它仅描述提供子模块
  • 如何将文件转换为内存中的字节数组?

    这是我的代码 public async Task
  • SQL LIKE 列值加通配符 DB2

    我试图在 LIKE 子句中使用列和通配符 我期待这能起作用 WHERE COLUMNA LIKE COLUMNB DB2 支持此功能吗 应该能够使用定位语法 http publib boulder ibm com infocenter dz
  • Mac OS 10.9 上的 Bluecove

    我正在尝试使用 bluecove 将我的 Android 设备连接到 PC 它在 Windows 上运行良好 但在 MAC OS 10 9 Mavericks 上出现以下问题 dyld lazy symbol binding failed
  • 如何获取存储在默认架构表中的租户标识符?

    我正在努力使用 hibernate 在基于 spring 的应用程序中启用多租户 我创建了一个自定义实现CurrentTenantIdentifierResolver并覆盖了resolveCurrentTenantIdentifier 确定
  • 如果文件不存在则创建一个

    我正在尝试打开一个文件 如果该文件不存在 我需要创建它并打开它进行写入 到目前为止我有这个 open file for reading fn input Enter file to open fh open fn r if file doe
  • 如何在 ubuntu 上卸载 Ruby?

    如何卸载 Ruby 1 9 2dev 2010 07 02 i486 linux 在ubuntu上 需要重新安装 请帮忙 从终端运行以下命令 sudo apt get purge ruby 通常对我来说效果很好 注意 这会删除与 GRUB
  • 使用 Media Foundation 对 Direct X 表面进行编码

    我正在尝试使用 MediaFoundation API 对视频进行编码 但在将示例推送到 SinkWriter 时遇到问题 我正在通过桌面复制 API 获取要编码的帧 我最终得到的是一个包含桌面图像的 ID3D11Texture2D 我正在
  • Visual Studio 添加数据连接 - 字典中不存在给定的键

    我已经阅读了之前的几个类似问题 但似乎没有一个提供解决方案 所以我再问一次 我正在使用 Visual Studio 并尝试连接到服务器资源管理器中的数据库 无论我尝试连接哪个数据库 它都会出现 字典中不存在给定的密钥 错误 我尝试过使用 S
  • 在 Windows 上安装 GLo​​g

    我需要安装 GLo g 才能在 OpenCV 中使用 SFM 模块 我已经找到了源代码链接 https github com google glog但我真的不知道如何在我的系统上安装它 因为我没有太多的经验 还有一个 自述文件 window
  • NDB 查询返回零结果。数据存储显示结果

    我发现这个特殊的问题 运行查询 确认记录存在 返回计数为零 这是我的模型 class Description ndb Model description ndb TextProperty time posted ndb DateTimePr
  • 将 OpenCV 矩阵循环转换为 JavaCV

    不久前得到了 O Reilly 的 学习 OpenCV 一书 从那时起 我一直忙于将我看到的所有示例代码从 OpenCV 转换为 JavaCV 通常还会进行一些我自己的修改 一直以来 我都试图尽可能保持纯 OpenCV C 语言 代码并避免