zoukankan      html  css  js  c++  java
  • Mat中的元素类型(如CV_8U)、范围、获取、格式转换

    一般使用的灰度图像元素是8位的uchar型(注意不是无符号整型,而是无符号字符型。元素值0~255),自定义Mat矩阵时,推荐使用8位无符号字符型,即CV_8U、CV_8UC3。

    再说一遍,条件反射式的记住:一般见到的Mat的元素是8位无符号字符型,不是8位无符号整型。

    【元素类型】

    CV_8U(即CV_8UC1)、CV_8UC3、CV_32S、CV_32F等,16、64位用的少本文不讨论。

    U——usigned char(无符号字符型,不是无符号整型)

    C——通道数

    S——signed int(有符号整型)

    【范围与默认值】

    CV_8U——0~255,205
    CV_8S——0~255,-51
    CV_32S——int型的范围,-842150451
    CV_32F——浮点型的范围,-431602080

    对于图像,显示范围整数0~255,小数0~1.0,所以float类型先将图像归一化,normalize(d, d, 1.0, 0.0, NORM_MINMAX)再显示。

    默认值查看方式:

        Mat data(3, 3, CV_32F);
        cout << data << endl;

    【具体元素的获取】用.at()

    .at()<类型>(行,列),中类型要与Mat中元素类型一致。注意行、列是从0索引开始的。所以2行3列处得写成.at()<类型>(1,2)

    灰度图:cout<<(int)gray.at<uchar>(row,col)<<endl; //转int正常显示

    彩色图:

    cout<<img.at<Vec3b>(row,col)<<endl; //b、g、r三元素的向量,Vec3b参考我的另一篇博客

    cout<<(int)img.at<Vec3b>(row,col)[0]<<endl; //b的值

    【格式转换】

        Mat data1(3, 3, CV_8S);
        Mat data2;
        data2.convertTo(data2, CV_32F);
        cout << data1 << endl;
        cout << data2 << endl;

    高精度往低精度转换要注意范围。

    【多余的话】

    1、Mat里元素类型为什么是uchar?

    节省空间 https://www.cnblogs.com/happyamyhope/p/7244538.html

  • 相关阅读:
    【Java学习】maven生命周期
    【Java学习】Project Structure详解
    html表格宽度设置失效
    1002. A+B for Polynomials (25)
    1001. A+B Format (20)
    自测-3 数组元素循环右移问题
    自测-5 Shuffling Machine
    自测-4 Have Fun with Numbers
    关联规则算法
    自测-2 素数对猜想
  • 原文地址:https://www.cnblogs.com/xixixing/p/12372068.html
Copyright © 2011-2022 走看看