【发布时间】:2015-07-15 13:40:07
【问题描述】:
我正在使用 opencv 在 C++ 中编写平滑样条曲线。
我需要使用稀疏矩阵(如在 MATLAB 中),即由零和一些非零对角线组成的大矩阵。我为此使用Mat 矩阵,因为我希望能够将它们相乘、转置等。
是否存在一些优雅的方式来初始化这样的矩阵,而不是一个又一个地处理它?
有一个名为Mat::diag 的函数,但这会创建一个列矩阵,这不是我需要的。是否可以将其转换为normal 矩阵?与我需要的最相似的是Mat::eye,但我需要初始化多个对角线,另外,我在同一对角线上有不同的数字,所以我不能使用Mat::eye。
谢谢!
【问题讨论】:
-
多个对角线是什么意思?您是否将 同一对角线中的不同数字 存储在向量或其他东西中?您能否编辑添加最终矩阵的外观?
-
例如,矩阵 3X3 有一个长度为 3 的“一般”对角线,两个长度为 2 的对角线各一个 - 在主对角线的上方和下方,等等。是的,我可能有不同的数字相同的对角线。
-
好吧,您可以设置不同的“对角线”,使用 Mat::eye 创建“小”子矩阵来生成每个子矩阵,然后将每个对角矩阵与实际大小的零初始化矩阵相加。如果您还需要设置不同的值,则需要手动设置它们。您总是可以将这一切包装在一个函数中。如果您提供包含数据的数据结构(向量或其他)以及您期望的最终结果,那么提供解决方案会容易得多
-
既然你提到了matlab,你知道在matlab中怎么做吗?如果是这样,请提供一个可以轻松移植到 OpenCV 的示例。
-
opencv 也有一个稀疏矩阵类。但不确定它是否实现了乘法等