首页 > 其他分享 >OpenCV加载图片显示对应类型(位深度)方法

OpenCV加载图片显示对应类型(位深度)方法

时间:2022-10-18 12:34:26浏览次数:59  
标签:case 读取 strType break OpenCV 深度 type CV 加载


  对于部分初学者,偶尔会想在代码中查看图片的位深度,一般我们会用Mat.type()来获得类型,但是默认输出的是整型数字,不便于理解,可能还需要自己对照宏定义去查看,这里有一段代码可以实现将整型转为宏定义位深度


string Type2String(int type)
{
string strType;
uchar depth = type & CV_MAT_DEPTH_MASK;
uchar chans = 1 + (type >> CV_CN_SHIFT);
switch (depth)
{
case CV_8U:
strType = "CV_8U"; break;
case CV_8S:
strType = "CV_8S"; break;
case CV_16U:
strType = "CV_16U"; break;
case CV_16S:
strType = "CV_16S"; break;
case CV_32S:
strType = "CV_32S"; break;
case CV_32F:
strType = "CV_32F"; break;
case CV_64F:
strType = "CV_64F"; break;
default:
strType = "UNKNOWN_TYPE"; break;
}
strType += "C";
strType += (chans + '0');

return strType;
}

OpenCV加载图片显示对应类型(位深度)方法_宏定义  比如,使用imread读取图片,如果flags参数不填,默认以彩色模式读取并转为8位,那么类型就是CV_8UC3, 如果flags设置位0,则以灰度模式读取,类型位CV_8UC1。但是,有时候我们会读取一些16位或32位的图片,这时候就需要设置flags参数为 IMREAD_UNCHANGED,这样读取的图片位深度才会被正确显示,如下:


Mat img = imread("1.tif", IMREAD_UNCHANGED);
cout << img.type() << endl;
cout << Type2String(img.type()) << endl;

OpenCV加载图片显示对应类型(位深度)方法_整型_02

OpenCV加载图片显示对应类型(位深度)方法_#include_03

   flags参数其他含义可以参考定义说明查看:

OpenCV加载图片显示对应类型(位深度)方法_宏定义_04

    完整代码:


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

using namespace std;
using namespace cv;

string Type2String(int type)
{
string strType;
uchar depth = type & CV_MAT_DEPTH_MASK;
uchar chans = 1 + (type >> CV_CN_SHIFT);
switch (depth)
{
case CV_8U:
strType = "CV_8U"; break;
case CV_8S:
strType = "CV_8S"; break;
case CV_16U:
strType = "CV_16U"; break;
case CV_16S:
strType = "CV_16S"; break;
case CV_32S:
strType = "CV_32S"; break;
case CV_32F:
strType = "CV_32F"; break;
case CV_64F:
strType = "CV_64F"; break;
default:
strType = "UNKNOWN_TYPE"; break;
}
strType += "C";
strType += (chans + '0');

return strType;
}

void main()
{
Mat img = imread("1.tif", IMREAD_UNCHANGED);
cout << img.type() << endl;
cout << Type2String(img.type()) << endl;
}

OpenCV加载图片显示对应类型(位深度)方法_#include_05

标签:case,读取,strType,break,OpenCV,深度,type,CV,加载
From: https://blog.51cto.com/stq054188/5765797

相关文章

  • OpenCV4.2使用viz模块显示3D图像
        在OpenCV3D视觉中如果需要显示三维数据或图像就需要用到viz模块,viz是OpenCV的3D显示模块,OpenCV官方release版本不包含此模块,需要我们自己cmake编译。  Cmake步......
  • OpenCV绘制标记函数drawMarker()
       OpenCV绘制标记函数drawMarker(),作用是在给定位置绘制一个标记,以OpenCV4.4.0为例:​​https://docs.opencv.org/4.4.0/d6/d6e/group__imgproc__draw.html#ga644c4a170......
  • OpenCV常用图像拼接方法(一) :直接拼接
      OpenCV常用图像拼接方法将分为四部分与大家分享,这里是第一种方法,欢迎关注后续。  OpenCV常用图像拼接方法(一):直接拼接,俗称硬拼,就是简单的将两张图片合并成一张......
  • OpenCV常用图像拼接方法(二) :基于模板匹配拼接
      OpenCV常用图像拼接方法将分为四部分与大家分享,这里是第二种方法,欢迎关注后续,本文源码与素材链接位于文章末尾。  OpenCV常用图像拼接方法(二):基于模板匹配的图......
  • 规则引擎深度对比,LiteFlow vs Drools!
    前言Drools是一款老牌的java规则引擎框架,早在十几年前,我刚工作的时候,曾在一家第三方支付企业工作。在核心的支付路由层面我记得就是用Drools来做的。难能可贵的是,Drools......
  • SuperMap加载三维模型数据(osgb格式)——以SuperMap iDesktop 10i为例
    目录一、生成配置文件(.scp)二、新建球面场景三、添加三维切片缓存图层 一、生成配置文件(.scp)1.1打开三维数据,配置文件,生成配置文件(如图);1.2配置文件设置(如图);①源数......
  • opencv
    介绍opencv是一个开源的用于图像处理的库,它对包括C/C++、java、python等语言有支持。安装将opencv\python\2.7\x64\cv2.pyd拷贝到python的安装目录下:Python27\Lib\site-pac......
  • 基于深度学习的人脸识别系统——原理篇
    1.深度学习的基本原理深度学习的起源最早可以追溯到感知机,所谓的感知机即只有一个神经元的单层神经网络,它只能完成一个简单的线性分类任务,而要解决非线性的任务,一是......
  • 如何实现通过Leaflet加载dwg格式的CAD图
    前言​ 在前面介绍了通过openlayers加载dwg格式的CAD图并与互联网地图叠加,openlayers功能很全面,但同时也很庞大,入门比较难,适合于大中型项目中。而在中小型项目中,一般用开......
  • Halcon实例转OpenCV--低对比度图像中提取圆形轮廓(附源码)
    导读本文主要介绍一个在低对比度图像中提取圆形轮廓的实例,并将Halcon实现转为OpenCV。实例来源Halcon例程dyn_threshold.hdev--动态阈值算子使用实例。原图:Halcon实现效果:......