opencv多通道元素访问

2024-01-07

我正在尝试学习如何使用 OpenCV 的新 C++ 界面。

如何访问多通道矩阵的元素?例如:

Mat myMat(size(3, 3), CV_32FC2);

for (int i = 0; i < 3; ++i)
{
    for (int j = 0; j < 3; ++j)
    {
        //myMat_at_(i,j) = (i,j);
    }
}

做到这一点最简单的方法是什么?类似于旧界面的 cvSet2D 之类的东西。
最有效的方法是什么?与旧接口中使用直接指针类似。


typedef struct elem_ {
        float f1;
        float f2;
} elem;
elem data[9] = { 0.0f };
CvMat mat = cvMat(3, 3, CV_32FC2, data );

float f1 = CV_MAT_ELEM(mat, elem, row, col).f1;
float f2 = CV_MAT_ELEM(mat, elem, row, col).f2;

CV_MAT_ELEM(mat, elem, row, col).f1 = 1212.0f;
CV_MAT_ELEM(mat, elem, row, col).f2 = 326.0f;

更新:适用于OpenCV2.0

1.选择一种类型来表示元素

Mat(或 CvMat)有 3 个维度:行、列、通道。
我们可以通过指定行和列来访问矩阵中的一个元素(或像素)。

CV_32FC2表示该元素是 32 位浮点值,具有 2 个通道。
所以上面代码中的 elem 是一种可接受的表示CV_32FC2.

您可以使用您喜欢的其他表示形式。例如 :

typedef struct elem_ { float val[2];    } elem;
typedef struct elem_ { float x;float y; } elem;

OpenCV2.0添加了一些新的类型来表示矩阵中的元素,例如:

template<typename _Tp, int cn> class CV_EXPORTS Vec // cxcore.hpp (208)

所以我们可以使用Vec<float,2>代表CV_32FC2,或使用:

typedef Vec<float, 2> Vec2f; // cxcore.hpp (254)

请参阅源代码以获取更多可以代表您的元素的类型。
这里我们使用Vec2f

2. 访问元素

访问 Mat 类中的元素的最简单有效的方法是 Mat::at。
它有 4 个重载:

template<typename _Tp> _Tp& at(int y, int x);                // cxcore.hpp (868)
template<typename _Tp> const _Tp& at(int y, int x) const;    // cxcore.hpp (870)
template<typename _Tp> _Tp& at(Point pt);                    // cxcore.hpp (869)
template<typename _Tp> const _Tp& at(Point pt) const;        // cxcore.hpp (871)
// defineded in cxmat.hpp (454-468)

// we can access the element like this :
Mat m( Size(3,3) , CV_32FC2 );
Vec2f& elem = m.at<Vec2f>( row , col ); // or m.at<Vec2f>( Point(col,row) );
elem[0] = 1212.0f;
elem[1] = 326.0f;
float c1 = m.at<Vec2f>( row , col )[0]; // or m.at<Vec2f>( Point(col,row) );
float c2 = m.at<Vec2f>( row , col )[1];
m.at<Vec2f>( row, col )[0] = 1986.0f;
m.at<Vec2f>( row, col )[1] = 326.0f;

3.与旧界面交互

Mat提供了2个转换函数:

// converts header to CvMat; no data is copied     // cxcore.hpp (829)
operator CvMat() const;                            // defined in cxmat.hpp
// converts header to IplImage; no data is copied
operator IplImage() const;

// we can interact a Mat object with old interface :
Mat new_matrix( ... );
CvMat old_matrix = new_matrix;  // be careful about its lifetime
CV_MAT_ELEM(old_mat, elem, row, col).f1 = 1212.0f;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

opencv多通道元素访问 的相关文章

  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • Android 相机未保存在特定文件夹 [MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA]

    当我在 Intent 中使用 MediaStore INTENT ACTION STILL IMAGE CAMERA 时遇到问题 相机正常启动 但它不会将文件保存在我的特定文件夹 photo 中 但是当我使用 MediaStore ACTI
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲

随机推荐

  • NHibernate 3 - 扩展 Linq 提供程序 BaseHqlGeneratorForMethod.BuildHql 问题

    我想用我自己的方法扩展 NHibernate 3 的默认 LINQ 提供程序 我希望能够使用 POCO 中的一些方法 我有一个名为 Range 的组件 它在我的许多 POCO 中经常使用 这个 nhibernate 组件类有一个 Conta
  • 为什么Dev C++编译后PE文件中多了这么多节?

    我用C C 写了一些简单的代码 在win10上用Dev C MinGW 编译为PE格式 我使用 Stud PE 工具查看编译后的exe的PE文件结构如下 正如您所看到的 除了正常的文件部分 如 text data bss 之外 还有一些其他
  • 结帐单个产品:验证购物车中是否有任何产品,并给出错误

    我无法想象如何验证购物车内是否有某些产品 我只需要允许一种产品进行结账 这是 class wc cart php 中使用的代码 用于防止在购物车中已存在相同产品的情况下添加产品 并且我确信应该非常相似 但我缺少一些 WP 变量来定义任何产品
  • 空字符串上的 ToString

    为什么其中第二个会产生异常 而第一个却不会 string s null MessageBox Show s MessageBox Show s ToString 更新 我可以理解的异常 对我来说 令人困惑的是为什么第一部分没有显示异常 这与
  • 如何在 PHP 7.1.1 中对浮点值进行 json_encode?

    PHP好像有a bug https bugs php net bug php id 72567它在 json encode 中处理小数精度的方式 只需对一个简单的浮点数进行编码就很容易看出 echo json encode testVal
  • Collectionview PerformBatchUpdates 崩溃

    我正在尝试使用 insertItemsAtIndexPaths 将新项目添加到我的集合视图中 我的应用程序在执行 Batchupdate 时崩溃 void addItems NSArray newProducts 1 2 3 4 self
  • WPF 的 Windows Phone 7 枢轴控件?

    是否有实施WP7 枢轴控制 https web archive org web 20150715170117 http blogs msdn com 80 b stephanc archive 2010 05 09 windows phon
  • git config --get-all 在哪里查看

    我找不到任何文档准确描述正在检查的 git 配置文件git config get all command正在运行 这是我为 core autocrlf 运行时的输出 git config get all core autocrlf fals
  • 在 ActionBarSherlock 上显示自定义按钮以显示滑动菜单

    我正在开发一个 Android 应用程序 使用动作栏夏洛克 http actionbarsherlock com with 滑动菜单 https github com jfeinstein10 SlidingMenu 现在 这就是我显示打开
  • numpy 中两个浮点数之间以对数间隔的数字

    我正在尝试使用 python 获取两个浮点数之间对数间隔的 1000 个数字 例如 0 674 到 100 0 之间 这样做的目的是获得更多接近 0 674 的数字 而不仅仅是接近 100 的几个大数字 我尝试使用 numpy logspa
  • Python3'无法导入名称'cached_property'

    我无法让它发挥作用 我不断添加模块 但每次都找不到新模块 为什么这段代码在Python3 6中不起作用 Code from robobrowser import robobrowser from bs4 import BeautifulSo
  • 区分 Javascript 中的触摸和交换事件

    我有一个用于交换图像的图片库 在画廊中 我使用了 touchstart touchmove touchend 和 touchcancel 事件 但现在我还需要处理触摸事件 那么 我应该在移动设备上分别区分触摸和交换事件吗 我正在使用这个技巧
  • python `str()` 函数是否调用类的 `__str__()` 函数?

    如果我定义一个有自己的类 str 函数 是str a 相当于a str where a是我班级的一个实例吗 我检查了蟒蛇文档 https docs python org 2 library functions html str 它没有明确说
  • 在 Groovy 中使用字符串访问地图的地图元素

    鉴于我有一张这样的地图 def myMap b c X 还有一根绳子 def key b c 我想查看使用密钥获取值 X 的选项 我自己想出了两种方法来实现这一目标 但我对这些解决方案不太满意 1 Eval me theMap myMap
  • 加密:在javascript和python中模拟SSL

    由于中国防火墙阻止了 google appengine 的 https 端口 所以我想通过javascript和python模拟一个安全套接字层来保护我的用户信息不会被那些ISP和GFW捕获 我的计划 握手 浏览器请求服务器 服务器生成加密
  • jaxb 当 xsi:nil=true 如果任何子元素存在它仍然显示

    我有以下 xml 输出 当父元素具有属性 xsi nil true 即使子元素为 nillable true 时 我们如何隐藏子元素 endDate XML输出
  • REST API 中错误 HTTP 方法的返回代码?

    我们的API用户可以获得root发送文件 收集清单 GET请求根 API 地址 如果他发送POST 我们应该返回一些东西 同样的问题也适用于其他资源路径 例如发送PATCH在查询路径等上 并非所有方法在某些路径上都有意义 正如我从 HTTP
  • 使用插值在模板中渲染 html 字符串?

    使用角度 4 3 0 假设我有一个像这样的字符串 它是组件的属性 p test 2 bla bla p p test1234 56 p p test test p 所以 我按照文档进行操作 https angular io guide te
  • 有没有办法知道哪个编译器生成了静态库?

    第三方为我提供了一个静态库 a 用于在 Solaris 站上链接 我尝试使用 sunpro 进行编译 但在链接步骤失败 我想这个问题来自我使用的编译器 而不是 gcc 或者只是它的版本 因为编译器提供的 std lib 可能会从库预期的版本
  • opencv多通道元素访问

    我正在尝试学习如何使用 OpenCV 的新 C 界面 如何访问多通道矩阵的元素 例如 Mat myMat size 3 3 CV 32FC2 for int i 0 i lt 3 i for int j 0 j lt 3 j myMat a