C++中OpenCV、Armadillo矩阵数据格式的转换方式

这篇具有很好参考价值的文章主要介绍了C++中OpenCV、Armadillo矩阵数据格式的转换方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  本文介绍在C++语言中,矩阵库Armadillomatvec格式数据与计算机视觉库OpenCVMat格式数据相互转换的方法。

  在C++语言的矩阵库Armadillo与计算机视觉库OpenCV中,都有矩阵格式的数据类型;而这两个库在运行能力方面各有千秋,因此实际应用过程中,难免会遇到需要将二者的矩阵格式数据类型加以相互转换的情况。本文就对其相互转换的具体方法加以介绍。

  首先,二者相互转换需要用到的代码如下。

#include <iostream>
#include <armadillo>
#include <opencv2/opencv.hpp>

using namespace std;

int main() {
	// 将Armadillo的列向量vec转为OpenCV的Mat
	arma::vec ar_vec = {1, 2, 3, 4};
	cout << ar_vec << "\n" << endl;
	cv::Mat cv_mat_1(ar_vec.n_rows, ar_vec.n_cols, CV_64FC1, ar_vec.memptr());
	cout << cv_mat_1 << "\n" << endl;

	// 将Armadillo的mat转为OpenCV的Mat
	arma::mat ar_mat = { {1, 2, 3}, {5, 6, 7} };
	cout << ar_mat << "\n" << endl;
	arma::mat ar_mat_t = ar_mat.t();
	cv::Mat cv_mat_2(ar_mat.n_rows, ar_mat.n_cols, CV_64FC1, ar_mat_t.memptr());
	cout << cv_mat_2 << "\n" << endl;

	// 将OpenCV的Mat转为Armadillo的mat
	cv::Mat cv_mat = (cv::Mat_<double>(2, 3) << 1, 8, 9, 15, 22, 37);
	cout << cv_mat << "\n" << endl;
	arma::mat ar_mat_1_t(reinterpret_cast<double*>(cv_mat.data), cv_mat.cols, cv_mat.rows);
	cout << ar_mat_1_t << "\n" << endl;
	arma::mat ar_mat_1 = ar_mat_1_t.t();
	cout << ar_mat_1 << "\n" << endl;

	// 将OpenCV的Mat转为Armadillo的列向量vec或行向量rowvec
	cv::Mat cv_mat_3 = (cv::Mat_<double>(1, 4) << 1, 3, 7, 15);
	cout << cv_mat_3 << "\n" << endl;
	arma::vec ar_vec_1_t(reinterpret_cast<double*>(cv_mat_3.data), cv_mat_3.cols, cv_mat_3.rows);
	cout << ar_vec_1_t << "\n" << endl;
	arma::rowvec ar_vec_1 = ar_vec_1_t.t();
	cout << ar_vec_1 << "\n" << endl;

	return 0;
}

  其中,主函数中共有4个部分,分别是将Armadillo的列向量vec转为OpenCVMat、将Armadillomat转为OpenCVMat、将OpenCVMat转为Armadillomat、将OpenCVMat转为Armadillo的列向量vec或行向量rowvec等4个过程的代码。

  转换的整体思路也非常简单。如果我们需要将Armadillo库的矩阵数据转换为OpenCV库的矩阵数据,那么就通过cv::Mat格式数据的构造函数,基于.memptr()函数将Armadillo库的矩阵数据元素分别提取出,放入OpenCV库的矩阵数据即可;反之,如果需要将OpenCV库的矩阵数据转换为Armadillo库的矩阵数据,则基于arma::mat格式数据的构造函数来实现即可。

  有一点需要注意的是,Armadillo库是以列优先的方式存储矩阵数据,而OpenCV库则是以行优先的方式存储矩阵数据;因此在上述二者相互转换的代码中,我们有时需要对转换的矩阵数据做一次转置操作,从而保证数据转换无误。

  为了方便对比,我们将上述代码运行所得结果加以展示;如下图所示。

C++中OpenCV、Armadillo矩阵数据格式的转换方式

  可以看到,上述三段代码可以成功地将Armadillo库、OpenCV库的矩阵数据加以相互转换。

  至此,大功告成。文章来源地址https://www.toymoban.com/news/detail-837868.html

到了这里,关于C++中OpenCV、Armadillo矩阵数据格式的转换方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用OpenCV将图像转换为NV12格式并加载NV12数据

    摘要:在新项目中,需要为上层应用开放几个接口,但又不想让上层应用过多依赖OpenCV。本文将详细介绍如何使用C++和OpenCV,通过加载图片并转换为NV12格式,实现对图像数据的处理,以及如何加载NV12数据并显示。这些步骤对于在相机等设备中处理YUV数据并与OpenCV进行无缝集

    2024年01月19日
    浏览(43)
  • Python与Pytorch系列(二) 本文(1.8万字) | 解析Opencv, Matplotlib, PIL | 三者之间的转换 | 三者对JPG和PNG读取和写入 |

    点击进入专栏: 《人工智能专栏》 Python与Python | 机器学习 | 深度学习 | 目标检测 | YOLOv5及其改进 | YOLOv8及其改进 | 关键知识点 | 各种工具教程 推荐网站 : OpenCV Matplotlib Pillow opencv的基本图像类型可以和numpy数组相互转化,因此可以直接调用 torch.from_numpy(img) 将图像转换成 t

    2024年02月03日
    浏览(41)
  • 【OpenCV • c++】颜色数据结构与颜色空间转换

    🚀 个人简介:CSDN「 博客新星 」TOP 10 , C/C++ 领域新星创作者 💟 作    者: 锡兰_CC ❣️ 📝 专    栏: 【OpenCV • c++】计算机视觉 🌈 若有帮助,还请 关注➕点赞➕收藏 ,不行的话我再努努力💪💪💪

    2024年02月11日
    浏览(31)
  • OpenCV中的格式转换

    实际音视频开发过程芯片是做了 硬件加速 的,主要涉及到视频编解码。二次开发过程中需要对SDK做一定的封装使用才行。 写这篇文章的目的和硬编解码无关。 只是如无硬件转换接口的情况下如何对原始数据的转换,以便后续查看。 采集(IN) 这里说的采集方式是摄像头的采集

    2024年01月21日
    浏览(26)
  • Armadillo:矩阵类、向量类、Cube类和泛型类

    密集矩阵的类,其元素按列优先顺序存储(即逐列) 根矩阵类是 Mattype ,其中 type 是以下项之一: float 、 double 、 std::complexfloat 、 std::complexdoubleshort 、 int 、 long 和无符号的 short 、 int 、 long 为方便起见,定义了以下 typedef: 在本文档中,为了方便起见,使用了垫子类型;

    2024年04月15日
    浏览(30)
  • opencv,numpy,tensor格式转换

    目前接触到的读取图片的方式主要是两种,一是使用opencv的 cv2 模块,二是 PIL. Image 模块,两者的使用有不同。 最先一个问题是读取格式。 1. cv2读取的图片格式直接是numpy的ndarry格式,图片是形状为 HxWxC 的BGR图片。 直接打印是BGR格式 经过格式转换之后得到正常的RGB格式图片

    2024年02月16日
    浏览(29)
  • NumPy图像格式相互转换:使用OpenCV

    在图像处理和计算机视觉领域,NumPy和OpenCV是两个非常常用的Python库。NumPy提供了强大的多维数组操作功能,而OpenCV则提供了图像处理和计算机视觉算法的实现。在许多情况下,我们需要在这两个库之间进行图像格式的相互转换。本文将介绍如何使用OpenCV在NumPy数组和OpenCV图像

    2024年02月03日
    浏览(25)
  • 【Python OpenCV格式转换:RGB与BGR互转】

    【Python OpenCV格式转换:RGB与BGR互转】 图像处理中颜色空间的转换是一个重要的问题。其中,RGB与BGR是最常见的两种格式,而OpenCV是最流行的图像处理库之一。在OpenCV中,我们可以轻松地将RGB和BGR格式之间进行转换。 下面是如何使用Python OpenCV将RGB格式转换为BGR格式的代码示例

    2024年02月13日
    浏览(33)
  • “Python OpenCV 图像格式转换:RGB与BGR互转“——使用OpenCV库进行图像处理的过程中,经常需要进行不同格式之间的转换。其中最为常见的就是R...

    “Python OpenCV 图像格式转换:RGB与BGR互转”——使用OpenCV库进行图像处理的过程中,经常需要进行不同格式之间的转换。其中最为常见的就是RGB和BGR格式之间的转换。本文将详细介绍如何使用opencv-python库将图像从RGB格式转换为BGR格式以及从BGR格式转换为RGB格式。 要实现图像格

    2024年02月12日
    浏览(57)
  • C++常用格式化输出转换

     在C语言中可以用printf以一定的格式打印字符,C++当然也可以。 输入输出及命名空间还不太了解的小伙伴可以看一看C++入门讲解第一篇。  在C++中,可以用流操作符(stream manipulators)控制数据的输出格式,这些流操作符定义在2个头文件( iomanip 和 ios )中,可以用输出运算

    2024年02月04日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包