我面临的问题是,通过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 '='
知道出了什么问题吗?我已经在网上搜索过,并且让自己头疼,试图挖掘信息(是的,再次进入深层的菜鸟)所以任何建议都会受到赞赏。
答案 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] = true
,x
和y
是您要用来访问三个嵌套向量的值。
你想要的是:
z
您使用的是一种访问内存中作为一维数组布局的3D数组的方法,但它不是您想要的。
确保您访问的元素确实存在!如果您显示的代码是实际代码,那么当您尝试使用时,pointVector[xVal][x][y] = true
将没有任何元素。
要解决此问题,您必须pointVector
所有向量(外部和内部)。这可能会变得很麻烦,您可能希望采用一维方法,即分配一个大的一维resize
数组并使用您使用的方法(bool
)访问它。
在以下代码中,largeArray[xVal*image.cols*image.rows + x*image.cols + y]
是您要访问的最大元素数。
numberOfValues