在不知道类型为opencv的情况下访问矩阵值

埃尔鲍尔

我正在编写一个函数,在其中需要访问的元素Mat,但是该函数可以接收Mat不同的类型。所以,如果我有:

filtered.at<TypeofMat>(i) = (typeofmat) somevalue;

我只是想做这样的事情filtered.at<myMat.type()>(i),但显然这是行不通的,因为type返回一个int

我被困住了,有人可以给我点灯吗?

三木

您可以将源矩阵转换为double(type CV_64F矩阵这样,您就不会因为强制转换而丢失任何数据。然后,由于知道矩阵的类型,因此可以照常处理此矩阵。最后一步是将目标图像转换回源类型。

但是,您需要知道矩阵的通道数。ACV_assert将确保您使用的是正确的类型。

#include <opencv2/opencv.hpp>
using namespace cv;

void foo(const Mat& src, Mat& dst)
{
    // Assert number of channels
    CV_Assert(src.channels() == 3);

    // Convert to CV64F
    Mat3d _src, _dst;
    src.convertTo(_src, CV_64F);
    _dst.create(_src.size());

    // Work on _src and _dst (you know the type)
    _dst(0,0) = _src(0,0) + Vec3d(1,2,3);

    // Convert _dst to src type
    _dst.convertTo(dst, src.type());
}

int main()
{
    Mat3b img(10,10,Vec3b(0,0,0));

    Mat res;
    foo(img, res);

    // res will be CV_8UC3

    return 0;
}

此方法也有替代方法:

  • 创建一个调用适当专业化的模板函数。这里
  • 在原始指针上工作。这里
  • 仅使用可以正确处理每种类型的OpenCV函数。这里如果可以的话,这通常是最好的选择。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不知道键/值类型的情况下测试接口{}是否为映射?

如何在不知道输入类型的情况下创建填充矩阵的方法

如何在不知道键的类型和值的类型的情况下遍历KeyValuePair的枚举

Chilkat在不知道类型的情况下加载SSHKey

在不知道类型的情况下从文件中读取

在不知道类型的情况下使用instanceof

AngularFire 2 在不知道 ID 的情况下访问值

在不知道键的情况下查找字典值的类型

在不知道底层类型的情况下,如何从模板化父类取回值?

在不知道列类型的情况下将NULL值转换为“ UNKNOWN”

如何在不知道键的情况下提取对象每个值的返回类型

在不知道记录的列名的情况下打印记录表类型的值

如何在不知道C语言中[变量参数]类型的情况下访问特定参数?

如何在不知道当前值的情况下向php中的MySQL SET类型添加可能的值

如何在不知道名称的情况下访问打印为十六进制的环境中的对象

如何在不知道键的情况下访问哈希表的第一个值?

在不知道矩阵名称的情况下在OpenCV中阅读YML

在不知道批次大小的情况下进行3-D批次矩阵乘法

如何在不知道大小的情况下绘制matlab中的所有矩阵元素?

如何在不知道大小的情况下取消分配不规则的***矩阵?

使用无类型的F#引号在不知道类型的情况下复制数组

在不知道各个维的情况下访问多维数组的每个元素

Javascript在不知道所有键的情况下访问多维数组

如何在不知道子类名称的情况下访问django中对象的子类?

如何在不知道完整文件路径的情况下访问文件?

在不知道变量名的情况下访问R6类变量吗?

如何在不知道组件名称的情况下访问组件的属性?

Angular 1.5:在不知道父级名称的情况下访问父级组件

在不知道这些属性名称的情况下访问对象的属性不起作用