OpenCV通过未知类型的Mat索引

zzz*_*zzz 6 opencv matrix

我想访问未知类型矩阵的元素:

for(int ii = 0; ii < origCols; ii++)
{
  colIdx.at<img.type()>(0,ii) = ii+1; // make one based index
}
Run Code Online (Sandbox Code Playgroud)

定义类型的表达式(在<>中)必须是常量,因此上面的代码不起作用.有没有办法做到这一点,而不仅仅是切换不同的图像类型?

Mat*_*ino 4

在浏览了一些文档之后,我认为没有一种原生的 OpenCV 方法可以在不避免分支的情况下做到这一点。

如果您只关心更清晰的代码,只要您不介意模板,就可以尝试模板方法:

template <typename T> void dostuff(cv::Mat& colIdx, int origCols)
{
   for(int ii = 0; ii < origCols; ii++)
   {
       colIdx.at<T>(0,ii) = (T)(ii+1); // make one based index
   }
}

void dostuff_poly(cv::Mat& colIdx, int origCols)
{
    switch(colIdx.type())
    {
        case CV_8UC1: dostuff<char>(colIdx, origCols); break;
        case CV_32FC1: dostuff<float>(colIdx, origCols); break;
        case CV_64FC1: dostuff<double>(colIdx, origCols); break;
        // and so on
        default:
    }
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,代码相当小,因此模板似乎不是一个糟糕的选择,并且可以为您提供所需的多态性,而无需编写一堆冗余代码。

也许其中一些教程会给您更好的想法:

OpenCV 文档:核心模块教程

OpenCV 文档:如何扫描图像