我正在构建一个函数,它涉及循环到输入图像中的每个像素。
我想使用指针访问每个值,因为它更快。
但是,由于输入图像可能具有不同的深度(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;
类型的实体如果有什么方法可以解决这个问题?提前谢谢。
答案 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...
这将为每个深度创建一个自己的结构,并且更快,因为您不必执行运行时条件。