在OpenCV中实现matlab中的im2double功能
最近在把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功能的更多相关文章
- matlab中 mcc/mbuild/mex 区别
mcc 的作用是将 .m文件编译为 c/c++动态链接库文件,使你可以在 c/c++程序中使用 matlab的一些函数功能.mcc 也可以将.m文件编译为exe可执行文件. mex 的作用是将 c/c ...
- Matlab中的数据类型
Matlab中有15种基本数据类型,主要是整型.浮点.逻辑.字符.日期和时间.结构数组.单元格数组以及函数句柄等. 1.整型:(int8:uint8:int16:uint16:int3 ...
- matlab中图片数据类型转换uint8与double
matlab中处理图像像素点数据: img1=double(imread('lenna.bmp')); matlab中imshow图片,要先转换成uint8: subplot(1,2,1),imsho ...
- Matlab中的eig函数和Opecv中eigen()函数的区别
奇异值分解的理论参见下面的链接 http://www.cnblogs.com/pinard/p/6251584.html https://blog.csdn.net/shenziheng1/artic ...
- MATLAB中的函数句柄及其应用
1.函数句柄的创建 函数句柄(function handle)是MATLAB中的一类特殊的数据结构,它的地位类似于其它计算机语言里的函数对象(Javascript,Python),函数指针(C++), ...
- MATLAB中绘制质点轨迹动图并保存成GIF
工作需要在MATLAB中绘制质点轨迹并保存成GIF以便展示. 绘制质点轨迹动图可用comet和comet3命令,使用例子如下: t = 0:.01:2*pi;x = cos(2*t).*(cos(t) ...
- matlab 中 eps 的分析
eps(a)是|a|与大于|a|的最小的浮点数之间的距离,距离越小表示精度越高.默认a=1: 这里直接在matlab中输入:eps == eps(1)(true). 我们知道浮点数其实是离散的,有限的 ...
- 图像处理中的matlab使用
图像的矩阵表示 类和图像类型 虽然使用的是整数坐标, 但 MATLAB 中的像素值(亮度)并未限制为整数. 表 1-1 列出了 MATLAB 和图像处理工具箱为描述像素值而支持的各种类. 表中的前 8 ...
- matlab中patch函数的用法
http://blog.sina.com.cn/s/blog_707b64550100z1nz.html matlab中patch函数的用法——emily (2011-11-18 17:20:33) ...
随机推荐
- python 浮点数问题
为什么 输入:0.2 + 0.1 得到的是:0.30000000000000004???? 0.1 * 3 = 0.30000000000000004????
- jdk -version could not open jvm.cfg 的解决办法
java 时出现 could not open jvm.cfg 的解决办法 问题描述: 重装JDK并更变目录后,出现JAVA -VERSION 出现could not open jvm.cf ...
- CodeForces Round #521 (Div.3) B. Disturbed People
http://codeforces.com/contest/1077/problem/B There is a house with nn flats situated on the main str ...
- springdata jpa
(转自:http://www.cnblogs.com/ityouknow/p/5891443.html) 首先了解JPA是什么? JPA(Java Persistence API)是Sun官方提出的J ...
- Android EditText默认不弹出输入法,以及获取光标,修改输入法Enter键的方法
一.Android EditText默认不弹出输入法的办法:1. 在AndroidManifest.xml中将需要默认隐藏键盘的Activity中添加属性即可(常用此方法) android:windo ...
- springboot 热加载的问题 idea下的springboot热加载的
最近在学spring框架,使用的是springboot可以省去很多的配置,可谓是初学者的福音啊. 尤其是在刚写代码的时候,都想马上看到自己写出来的效果,看看能不能输出hello world,所以要不断 ...
- isAssignableFrom
instanceof 针对实例 isAssignableFrom针对class对象 isAssignableFrom 是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类 ...
- hdu 1158 dp
/* 题目大意:给n个月工作需要的人数,雇佣一个需要花hire 每个月的薪水是salary,解雇一个需要fire 求完成所有工作的最小费用 dp(i,j)表示第i个月雇佣j员工的最小费用 */ #in ...
- 【HDOJ5538】House Building(计算几何)
题意:给定一个n*m的方阵,第i行第j列的高度为a[i][j],问除了下底面之外其余五面的总表面积 n<=50,0<=a[i][j]<=1000 思路:队友写的,抱大腿 考虑当前方格 ...
- *UOJ#223. 【NOI2016】国王饮水记
$n \leq 8000$的数列,问不超过$m \leq 1e9$次操作后第一个数字最大是多少.操作:选一些数,把他们变成他们的平均值.需要保留$p \leq 3000$位小数,提供了一个小数高精度库 ...