opencv矩阵元素类型转换和cvConvertScale()函数用法

转换转自这里
函数用法转自这里

在OpenCV中很多对数据的运算都需要转换为64F类型,比如伽玛变换,这个很明显要求幂的底数是double类型~
而cvShowImage()又要求是U8才能显示,否则显示出来是一片空白!
所以经常要进行转换,怎么做呢?看了下面的几行代码你就知道了!
IplImage *pSrcImage = cvLoadImage(“pout.jpg”, CV_LOAD_IMAGE_UNCHANGED);
IplImage *pGrayImage_8U = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U, 1);
IplImage *pGrayImage_8U_2 = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U, 1);
IplImage *pGrayImage_64F=cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_64F, 1);
cvCvtColor(pSrcImage, pGrayImage_8U, CV_BGR2GRAY); //RGB转灰度图像
cvConvertScale(pGrayImage_8U, pGrayImage_64F); //8U转64F
cvConvertScale(pGrayImage_64F, pGrayImage_8U_2) //64F转8U


opencv与一个函数相乘的两种方法

第一种:参考http://www.OpenCV.org.cn/index.PHP/Cxcore%E6%95%B0%E7%BB%84%E6%93%8D%E4%BD%9C#ConvertScale
用函数cvConvertScale();
void cvConvertScale( const CvArr* src, CvArr* dst, double scale=1, double shift=0 );
src
输入数组.
dst
输出数组
scale
比例因子.
shift
该加数被加到输入数组元素按比例缩放后得到的元素上
函数 cvConvertScale 有多个不同的目的因此就有多个同义函数(如上面的#define所示)。该函数首先对输入数组的元素进行比例缩放,然后将shift加到比例缩放后得到的各元素上,即: dst(I)=src(I)*scale + (shift,shift,…),最后可选的类型转换将结果拷贝到输出数组。
多通道的数组对各个通道是独立处理的。
类型转换主要用舍入和溢出截断来完成。也就是如果缩放+转换后的结果值不能用输出数组元素类型值精确表达,就设置成在输出数组数据轴上最接近该数的值。
如果 scale=1, shift=0 就不会进行比例缩放. 这是一个特殊的优化,相当于该函数的同义函数名:cvConvert 。如果原来数组和输出数组的类型相同,这是另一种特殊情形,可以被用于比例缩放和平移矩阵或图像,此时相当于该函数的同义函数名:cvScale。
如何在matlab下要实现矩阵A = B*a,A、B为矩阵,a为系数,则在opencv下是 cvConvertScale(B,A,a,0); 如果要实现A = B*a + b ,在opencv下既是:cvConvertScale(B,A,a,b)
第二种方法:参考http://hi.baidu.com/262035983/blog/item/6f9a8d51b51cea140cf3e3ad.html
用函数cvAddWeighted()来实现。
void cvAddWeighted(const CvArr* src1,double alpha,const CvArr* src2,double beta,double gamma,CvArradded to each sum* dst);//带权相加相当于dst(x,y) = alpha* src1(x,y) + beta* src2(x,y) + gamma , dst为输出矩阵。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值