最近在把matlab的代码转化到VS2010上。

matlab中采用im2double将读入的图像转换为double型,在OpenCV中就需要对图像进行深度的转换。

读入一幅灰度图像,深度为1(8U),在与其他矩阵M做运算事要保证深度是一致的,所以需要转换,如转换到深度为8(64F),需要用到OpenCV中的函数cvConvert。

代码如下:
IplImage* src = cvLoadImage("./Image/2/多波段.bmp",CV_LOAD_IMAGE_GRAYSCALE);   //载入灰度图像,深度为8U

IplImage* dst= cvCreateImage(cvSize(src->width,src->height),IPL_DEPTH_64F, 1);

cvConvert(src, dst);    //dst的数据部分在数值上与src的值一致,而其深度转换成了64F。

//其实我是用的这个: cvConvertScale(src, dst, 1.0/255, 0);

cvConvert函数用于图像和矩阵之间的相互转换

为什么要用cvConvert 把IplImage转为矩阵?

因为IplImage里的数据,只能用uchar的形式存放,当需要把这些图像数据看作数据矩阵来运算时,0~255的精度显然满足不了要求;

然而CvMat里却可以存放任意通道数、任意格式的数据,这个机制方便了研究中的这种需求,转化为矩阵就可以进行更自由的计算。

opencv的IplImage结构中有一个成员:depth。
其取值如下:
枚举值

用%d输出 二进制

IPL_DEPTH_8U : 8 : 0x0000 0008
IPL_DEPTH_8S :

-2147483640 : 0xffff fff8

IPL_DEPTH_16U : 16 : 0x0000 0010
IPL_DEPTH_16S : -2147483632 : 0xffff fff0
IPL_DEPTH_32S : -2147483616 : 0xffff ffe0
IPL_DEPTH_32F : 32 : 0x0000 0020
IPL_DEPTH_64F : 64 : 0x0000 0040

从文件或摄像头直接读取的图像一般都是8U的
当有特殊计算需求时可以用cvScale() 或cvCvtScale() 转换。

保存时必须转换回8U!

不同的深度其取值范围不一样:
0.0--1.0之间

IPL_DEPTH_64F

0.0--1.0之间

IPL_DEPTH_32F

0--65535之间

IPL_DEPTH_32S

-32768--32767之间

IPL_DEPTH_16S

0--65535之间

IPL_DEPTH_16U

-128--127之间

IPL_DEPTH_8S

0--255之间

IPL_DEPTH_8U

在用cvCreateMat函数时,参数:

CV_8UC1 for Unsigned 8bits

CV_32FC1 for float(32位)

CV_64FC1 for double(64位)

在OpenCV中实现matlab中的im2double功能的更多相关文章

  1. matlab中 mcc/mbuild/mex 区别

    mcc 的作用是将 .m文件编译为 c/c++动态链接库文件,使你可以在 c/c++程序中使用 matlab的一些函数功能.mcc 也可以将.m文件编译为exe可执行文件. mex 的作用是将 c/c ...

  2. Matlab中的数据类型

    Matlab中有15种基本数据类型,主要是整型.浮点.逻辑.字符.日期和时间.结构数组.单元格数组以及函数句柄等.         1.整型:(int8:uint8:int16:uint16:int3 ...

  3. matlab中图片数据类型转换uint8与double

    matlab中处理图像像素点数据: img1=double(imread('lenna.bmp')); matlab中imshow图片,要先转换成uint8: subplot(1,2,1),imsho ...

  4. Matlab中的eig函数和Opecv中eigen()函数的区别

    奇异值分解的理论参见下面的链接 http://www.cnblogs.com/pinard/p/6251584.html https://blog.csdn.net/shenziheng1/artic ...

  5. MATLAB中的函数句柄及其应用

    1.函数句柄的创建 函数句柄(function handle)是MATLAB中的一类特殊的数据结构,它的地位类似于其它计算机语言里的函数对象(Javascript,Python),函数指针(C++), ...

  6. MATLAB中绘制质点轨迹动图并保存成GIF

    工作需要在MATLAB中绘制质点轨迹并保存成GIF以便展示. 绘制质点轨迹动图可用comet和comet3命令,使用例子如下: t = 0:.01:2*pi;x = cos(2*t).*(cos(t) ...

  7. matlab 中 eps 的分析

    eps(a)是|a|与大于|a|的最小的浮点数之间的距离,距离越小表示精度越高.默认a=1: 这里直接在matlab中输入:eps == eps(1)(true). 我们知道浮点数其实是离散的,有限的 ...

  8. 图像处理中的matlab使用

    图像的矩阵表示 类和图像类型 虽然使用的是整数坐标, 但 MATLAB 中的像素值(亮度)并未限制为整数. 表 1-1 列出了 MATLAB 和图像处理工具箱为描述像素值而支持的各种类. 表中的前 8 ...

  9. matlab中patch函数的用法

    http://blog.sina.com.cn/s/blog_707b64550100z1nz.html matlab中patch函数的用法——emily (2011-11-18 17:20:33) ...

随机推荐

  1. 微信小程序简单的数据表格及查询功能

    简介: 此项目是一个前后端分离的小demo, 开发工具:idea+微信小程序开发工具 前端:界面布局样式和js的跳转 后端:依靠SpringBoot的业务逻辑层 项目的码云地址: https://gi ...

  2. PHP 如何在txt里查找包含某个字符串的那一行?

    <?php $handler=fopen("1.txt","r"); while(!feof($handler)) { $m = fgets($handl ...

  3. 2018CCPC网络赛

    A - Buy and Resell HDU - 6438 The Power Cube is used as a stash of Exotic Power. There are nn cities ...

  4. TypeError: $.ajaxFileUpload(…) is not a function

    今天做一个图片上传功能,用到了ajaxFileUpload,控制台报错TypeError: $.ajaxFileUpload(…) is not a function,都说是jQuery版本问题,也试 ...

  5. [ACG001E] BBQ hard [dp]

    题面: 传送门 思路: 首先,一个暴力的想法 对于每一对pack,求出f(ai+aj,bi+bj),其中f(x,y)=(x+y)!/(x!y!),也就是x个a,y个b的排列方式个数 然后转化模型,将f ...

  6. POJ3207 Ikki's Story IV - Panda's Trick 【2-sat】

    题目 liympanda, one of Ikki's friend, likes playing games with Ikki. Today after minesweeping with Ikk ...

  7. 无序字母对 character

    无序字母对 character 题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入 ...

  8. 【bzoj3894】文理分科 网路流

    [bzoj3894]文理分科 2015年3月25日3,4002 Description  文理分科是一件很纠结的事情!(虽然看到这个题目的人肯定都没有纠 结过)  小P所在的班级要进行文理分科.他的班 ...

  9. android2.2 watchdog分析

    1 watchdog分析 Watchdog就是“看门狗”.其最初存在的意义是因为以前嵌入式设备上的程序经常跑飞(电磁干扰之类的),所以专门设置了一个硬件看门狗,每个一段时间,看门狗就去检查一下某个参数 ...

  10. vue中echarts 在element-ui的tab 切换时 width 为100px 时的解决方式

    最近在项目中遇到了这种情况,需要在tab控件上渲染多个echart图标,然后切换查看时,发现图表的宽度不正确 原因:在页面进行加载时,隐藏的图表找不到对应的div大小,所以默认给了一个大小.所以要做的 ...