在opencv,C++中初始化对角矩阵
Initializing diagonal matrix in opencv, C++
我正在使用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
。
如果你的矩阵足够大,以至于上面的运算很慢,那么看看这里。
相关文章:
- 在 OpenCV 的 namedWindow 之前或之后初始化 Tesseract
- C++ openCV 垫初始化
- C++/OpenCV 无法初始化 3D Mat
- 初始化多通道 OpenCV 垫
- opencv Mat 初始化,运行时错误为零
- 初始化暗网 opencv
- OpenCV 是否用零初始化权重矩阵,cv::ml::ANN_MLP
- 从YML文件OPENCV C 初始化摄像机参数
- 将数组分配给OPENCV C 中的初始化垫子对象
- OpenCV 中的相机初始化失败
- 如何初始化包含OpenCV的2D向量:矩阵
- OpenCV卡尔曼滤波器初始化错误
- OpenCV FeatureDetector 未初始化
- 如何从opencv cv::Mat或行主数组初始化特征矩阵
- OPENCV :不同方法的 CUDA 上下文初始化
- OpenCV级联分类器初始化
- 如何在opencv中创建和初始化带有alpha通道的图像
- 我怎样才能得到OpenCV的VideoCapture初始化时出了什么问题?
- 从数组初始化OpenCv Mat不工作
- 如何在c++中初始化OpenCV中的轮廓