根据不同的输入类型进行C ++类型转换(OpenCV)

时间:2018-01-24 19:36:13

标签: c++ opencv

我正在构建一个函数,它涉及循环到输入图像中的每个像素。

我想使用指针访问每个值,因为它更快。

但是,由于输入图像可能具有不同的深度(8位,16位,32位),因此我需要相应地创建正确类型的指针,以便访问像素值。

这是我做的:// src是来自OpenCV的cv :: Mat类型输入

uchar *pointer = src.ptr<uchar>(0);
if (src.depth() == 1) { (char)*pointer; *pointer = src.ptr<char>(0); }
if (src.depth() == 2) { (ushort)*pointer; *pointer = src.ptr<ushort>(0); }
if (src.depth() == 3) { (short)*pointer; *pointer = src.ptr<short>(0); }
if (src.depth() == 4) { (int)*pointer; *pointer = src.ptr<int>(0); }
if (src.depth() == 5) { (float)*pointer; *pointer = src.ptr<float>(0); }

它给了我错误:类型&#39; char / ushort / short / int / float&#39;无法分配给&#39; uchar&#39;

类型的实体

如果有什么方法可以解决这个问题?提前谢谢。

1 个答案:

答案 0 :(得分:0)

由于您没有提供有关此src结构的信息,因此我无法确定您的目标是什么。

在结构和对象之间的关系方面看似糟糕的设计,因为你不能只是简单地改变一个值的类型。

你实际可以做的事情(如果有帮助的话)是专门研究你的src变量的结构:

template <typename T, unsigned int depth>
struct Image;

template <typename T>
struct Image<0> {}; // Implement with char*

template <typename T>
struct Image<1> {}; // Implement with unsigned char*

template <typename T>
struct Image<2> {}; // Implement with short*

// and so on...

这将为每个深度创建一个自己的结构,并且更快,因为您不必执行运行时条件。