我正在使用opencv在C++中编写平滑样条曲线。
我需要使用稀疏矩阵(就像在MATLAB中一样(,即由零和几个非零对角线组成的大矩阵。为此,我使用Mat
矩阵,因为我希望能够对它们进行乘法、转置等。
是否存在一些优雅的方法来初始化这样的矩阵,而不需要逐个处理它?
有一个名为Mat::diag
的函数,但它创建了一个列矩阵,这不是我所需要的。是否可以将其转换为normal
矩阵?与我需要的最相似的是Mat::eye
,但我需要初始化多个对角线,此外,我在同一对角线上有不同的数字,所以我不能使用Mat::eye
。
谢谢!
我自己解决了:(
Mat B = Mat::zeros(3, 3, CV_8UC1);
Mat C = B.diag(0);
C.at<unsigned char>(0) = 64;
C.at<unsigned char>(1) = 64;
C.at<unsigned char>(2) = 64;
Mat::diag
是动态的,因此它是有效的。
您可以使用Mat::eye
进行初始化,然后乘以包含所需对角线值的1乘N维矩阵。(或者只需手动设置。(如果矩阵足够大,这些操作需要大量时间,则应而不是使用未针对稀疏矩阵优化的Mat
。
如果你的矩阵足够大,以至于上面的运算很慢,那么看看这里。