无法用C ++写入4D向量(没有可行的重载' =')

时间:2017-08-28 15:21:01

标签: c++ vector

我面临的问题是,通过openCV库我正在阅读一系列图像作为他们自己的" Mat"格式:图像矩阵。 基本上我需要写任何像素值> s> 0为" true"到4D向量和任何== 0为" false"。

为什么是4维?     vector<vector<vector<bool>>>pointVector; 3个矢量级别指的是X,Y,Z轴。布尔只是真/假。图像是Y×Z,沿X轴以3D形式堆叠。 基本上我们有一系列图像表示以3D堆叠的点。 (可怜的解释?可能) 无论如何,问题在于我的功能是读取单张照片中的点然后将它们写出到4D矢量。

注意:xVal是一个全局存储照片的ID号。它用于X维度(图像层)。

 Int lineTo3DVector (Mat image)
 {
      // Takes in matrix and converts to 4D vector.
      // This will be exported and all vectors added together into a point cloud

      vector<vector<vector<bool>>>pointVector; 
      for (int x=0; x<image.rows; x++)
      {
           for (int y = 0; y<image.cols; y++)
           {
                if((image.at<int>(x,y)) > 0)
                {
                     pointVector[xVal*image.cols*image.rows + x*image.cols + y] = true;
                }
           }
      }
 }

我还没有完成所有函数的编写,因为if语句打算在地址xVal,x,y处写pointVector并使用bool&#39; true&#39;抛出错误说:

 No viable overloaded '='

知道出了什么问题吗?我已经在网上搜索过,并且让自己头疼,试图挖掘信息(是的,再次进入深层的菜鸟)所以任何建议都会受到赞赏。

1 个答案:

答案 0 :(得分:3)

您只访问第一个矢量(外部矢量),而不实际访问其中的任何矢量。

语法为The type of the expression in the select clause is incorrect. Type inference failed in the call to 'Select'. 'T' does not contain a definition for 'ToList' and no extension method 'ToList' accepting a first argument of type 'T' could be found (are you missing a using directive or an assembly reference?) ,其中pointVector[x][y][z] = truexy是您要用来访问三个嵌套向量的值。

你想要的是:

z

您使用的是一种访问内存中作为一维数组布局的3D数组的方法,但它不是您想要的。

确保你不会超出界限

确保您访问的元素确实存在!如果您显示的代码是实际代码,那么当您尝试使用时,pointVector[xVal][x][y] = true 将没有任何元素。

要解决此问题,您必须pointVector所有向量(外部和内部)。这可能会变得很麻烦,您可能希望采用一维方法,即分配一个大的一维resize数组并使用您使用的方法(bool)访问它。

1D方法

在以下代码中,largeArray[xVal*image.cols*image.rows + x*image.cols + y]是您要访问的最大元素数。

numberOfValues