zoukankan      html  css  js  c++  java
  • OpenCV cv::Mat.type() 以及各类型数据转换

    一、cv::Mat的类型有30种,预定义的enum 0-30分别如下

    图转自http://blog.csdn.net/hyqsong/article/details/46367765

    二、type由depth和channel组成,depth   由.depth()返回的enum有以下这些

    enum { CV_8U=0, CV_8S=1, CV_16U=2, CV_16S=3, CV_32S=4, CV_32F=5, CV_64F=6 };

    例如CV_8U代表8位unsigned int , CV_16S代表16位short

    .channels()返回结果是几就代表是几通道的

    三、src.convertTo(dst, CV_8UC1)这个函数,只能进行depth的转换,不能转换通道。

    例如src是CV_8UC3,执行上面这个函数之后的dst,依然是CV_8UC3,而不会变为CV_8UC1,注意,此时仅为数据截断。

    CV_16U->CV_8U dst.convertTo(src, CV_8U, 1/257.0) ,这里使用257而不是256是为了结果<=255保障不越界

    如果是32F或64F转换,则

    double maxVal = 0;
    double minVal = 0;
    cv::minMaxLoc(image_mat, &minVal, &maxVal);
    scale = 255.0 / (maxVal - minVal);
    shift = -255.0*minVal / (maxVal - minVal);
    image_mat.convertTo(image_mat, CV_8U, scale, shift);

    先使用minMaxLoc获取最大最小值,然后按比例缩放偏移

    四、要改变通道数,要使用 cv::cvtColor(src, dst, COLOR_BGR2GRAY);   3通道就转化成了单通道

    Mat_<uchar>---------CV_8U
    Mat<char>-----------CV_8S
    Nat_<short>---------CV_16S
    Mat_<ushort>--------CV_16U
    Mat_<int>-----------CV_32S
    Mat_<float>----------CV_32F

    Mat_<double>--------CV_64F

    联系方式:emhhbmdfbGlhbmcxOTkxQDEyNi5jb20=
  • 相关阅读:
    net core 接入 Google Authenticator
    centos7 安装Mysql8.0笔记
    学习笔记: AOP面向切面编程和C#多种实现
    Exceptionless 生产部署笔记
    图片上下左右自适应对齐
    rem
    mysql command line client 使用命令
    文字溢出换行或者省略号
    一个自欺欺人的代码(便于理解函数和对象基础)
    this、new、模式工厂、创建新的构造函数
  • 原文地址:https://www.cnblogs.com/zl1991/p/14412042.html
Copyright © 2011-2022 走看看