OpenCV reshape函数

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

reshape函数

在opencv中,reshape函数比较有意思,它既可以改变矩阵的通道数,又可以对矩阵元素进行序列化,非常有用的一个函数。

函数原型:

C++: Mat Mat::reshape(int cn, int rows=0) const

参数比较少,但设置的时候却要千万小心。

cn: 表示通道数(channels), 如果设为0,则表示保持通道数不变,否则则变为设置的通道数。

rows: 表示矩阵行数。 如果设为0,则表示保持原有的行数不变,否则则变为设置的行数。

首先设置一个初始矩阵:一个20行30列1通道的一个矩阵
复制代码

int main()
{
    Mat data = Mat(20, 30, CV_32F);  //设置一个20行30列1通道的一个矩阵
    cout << "行数: " << data.rows << endl;
    cout << "列数: " << data.cols << endl;
    cout << "通道: " << data.channels() << endl;
    system("pause");
    return 1;
}

OpenCV reshape函数

第一次变化:通道数不变,将矩阵序列化1行N列的行向量。

int main()
{
    Mat data = Mat(20, 30, CV_32F);  //设置一个20行30列1通道的一个矩阵
    cout << "行数: " << data.rows << endl;
    cout << "列数: " << data.cols << endl;
    cout << "通道: " << data.channels() << endl;
    cout << endl;
    Mat dst = data.reshape(0, 1);
    cout << "行数: " << dst.rows << endl;
    cout << "列数: " << dst.cols << endl;
    cout << "通道: " << dst.channels() << endl;
    system("pause");
    return 1;
}

OpenCV reshape函数

第二次变化:通道数不变,将矩阵序列化N行1列的列向量。

int main()
{
    Mat data = Mat(20, 30, CV_32F);  //设置一个20行30列1通道的一个矩阵
    cout << "行数: " << data.rows << endl;
    cout << "列数: " << data.cols << endl;
    cout << "通道: " << data.channels() << endl;
    cout << endl;
    Mat dst = data.reshape(0, data.rows*data.cols);
    cout << "行数: " << dst.rows << endl;
    cout << "列数: " << dst.cols << endl;
    cout << "通道: " << dst.channels() << endl;
    system("pause");
    return 1;
}

OpenCV reshape函数

可见,不管怎么变,都遵循这样一个等式:

变化之前的  rows * cols * channels = 变化之后的 rows * cols * channels

我们只能改变通道数和行数,列数不能改变,它是自动变化的。

但是要注意的是,在变化的时候,要考虑到是否整除的情况。如果改变的数值出现不能整除,就会报错。

最后,我们再验证一下:opencv在序列化的时候是行序列化还是列序列化呢?

我们知道,在matlab里面,是列序列化, 即取值为从上到下,从左到右,opencv又是怎么样的呢

int main()
{
    Mat data = (Mat_<int>(2, 3) << 1, 2, 3, 10, 20, 30);  //2行3列的矩阵
    cout << data << endl;
    Mat dst1 = data.reshape(0, 6);   //通道不变,序列成列向量
    cout <<endl<< dst1 << endl;
    Mat dst2 = data.reshape(0, 1);   //通道不变,序列成行向量
    cout << endl << dst2 << endl;
    system("pause");
    return 1;
}

OpenCV reshape函数

从结果看出,不管是变化成行向量还是列向量,opencv都是行序列化,即从左到右,从上到下,与matlab是不一样的。

简单的一个函数,功能却很强大!你会用了吗文章来源地址https://www.toymoban.com/news/detail-491472.html

到了这里,关于OpenCV reshape函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 使用python_opencv比较图像差异/使用python_opencv找出两张图像的差异范围

    目录 1 创建conda环境 2 安装python库  2.1 报错 ModuleNotFoundError: No module named \\\'numpy\\\' 3 image_diff.py

    2024年02月05日
    浏览(44)
  • numpy的arange函数与reshape函数

    reshape函数的参数说明: a.reshape(m,n)表示将原有数组a转化为一个m行n列的新数组,a自身不变。m与n的乘积等于数组中的元素总数 reshape(m,n)中参数m或n其中一个可写为\\\"-1\\\",\\\"-1\\\"的作用在于计算机根据原数组中的元素总数自动计算行或列的值。 举例:  输出结果:  参考资料: P

    2024年02月01日
    浏览(31)
  • opencv 基础54-利用形状场景算法比较轮廓-cv2.createShapeContextDistanceExtractor()

    注意:新版本的opencv 4 已经没有这个函数 cv2.createShapeContextDistanceExtractor() 形状场景算法是一种用于比较轮廓或形状的方法。这种算法通常用于计算两个形状之间的相似性或差异性,以及找到最佳的匹配方式。 下面是一种基本的比较轮廓的流程,使用了形状场景算法: 数据准

    2024年02月13日
    浏览(34)
  • Python图像处理指南:PIL与OpenCV的比较【第136篇—PIL】

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 图像处理在计算机视觉和图像识别等领域中扮演着至关重要的角色。Python作为一种功能强大且易于学习的编程语言,提供了多种库供图像处理

    2024年03月19日
    浏览(45)
  • python中reshape函数用法详解

    reshape函数 reshape函数是Numpy库中的一个函数,可以用于改变一个数组的形状,例如将一个二维数组转换成一个三维数组。 程序运行结果: 下面是reshape函数的具体实现细节: 其中,array表示要改变形状的数组,newshape表示新的形状,order表示元素在新数组中的存储顺序(可选,

    2024年02月16日
    浏览(53)
  • NumPy--reshape、切片操作、copy函数

    ⛳reshape方法和flatten、ravel方法 reshape 用于改变数组的形状和维度 flatten 用于将多维数组展平为一维数组 。该方法返回一个新的一维数组,其中包含了原始数组中的所有元素,按照原始数组的元素顺序排列。 注意 reshape 方法返回的是一个新的数组对象,原始数组并没有被修改

    2024年02月16日
    浏览(40)
  • 特征点的检测与匹配(ORB,SIFT,SURFT比较)[opencv-python]

    本文旨在总结opencv-python上特征点的检测和匹配。 1、特征点的检测(包括:ORB,SIFT,SURFT) 2、特侦点匹配方法 (包括:暴力法,FLANN,以及随机抽样一致性优化RANSAC算法) 注:由于SURF专利问题,所以opencv官方包目前不支持SURF但支持ORB和SIFT,安装opencv-contrib-python包就可以解决 一

    2024年02月06日
    浏览(50)
  • 用于计算机视觉的 OpenCV(C++ 与 Python)与 MATLAB之间的优缺点比较

    我们经常混淆我们的工具和我们的手艺。工具可以帮助你练习手艺,但它们并不能使你成为一名优秀的工匠。一个好工匠的口袋里有许多不同的工具,她会明智地使用适合工作的工具。她没有嫁给这些工具。她嫁给了她的手艺。 我经常被关于编程语言的战争逗乐。人们对哪一

    2024年02月13日
    浏览(50)
  • 深入浅出TensorFlow2函数——tf.reshape

    分类目录:《深入浅出TensorFlow2函数》总目录 语法 参数 返回值 返回一个新的形状为 shape 的 tf.Tensor 且具有与 tensor 以同样的顺序和相同的值。 实例 输入: 如果 shape 的一个参数为是 -1 ,则计算该维度的大小,使总大小保持不变。特别是,若 shape 为 [-1] ,则将 tensor 展平为一

    2024年02月11日
    浏览(60)
  • OpenCV、Dlib 和深度学习中的各种人脸检测方法与性能比较--包含C++ 和 Python 代码实现

    文末附基于Python和C++两种方式实现的测试代码下载链接 在本教程中,我们将讨论 OpenCV、Dlib 和深度学习中的各种人脸检测方法,并对这些方法进行定量比较。我们将为以下面部检测器共享 C++ 和 Python 代码: OpenCV 中的 Haar 级联人脸检测器 OpenCV 中基于深度学习的人脸检测器。

    2024年02月10日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包