IpIImage -> CvMat 转换方法
2024-09-02 23:27:06
Ipl转为CvMat 一般为这两种方法:
1:
/*cvGetMat*/
CvMat matheader;
CvMat * mat = cvGetMat(img, &matheader);
2:
/*cvConvert*/
CvMat * mat = cvCreateMat(img->height, img->width, CV_64FC3);
cvConvert(img, mat)
不过经过测试,感觉cvGetMat并不好用,因为需要多一步初始化matheader的步骤。麻烦。所以推荐方法
-------------------------------------------------------------------------------------------------------------------
方法2测试如下图所示,
我们可以看到,如果声明不同的话——在cvCreateMat理,第三个参数:type,可以是任何预定义类型,预定义类型的结构如下:CV_<bit_depth> (S|U|F)C<number_of_channels>。于是,矩阵的元素可以是32位浮点型数据(CV_32FC1),或者是无符号的8位三元组的整型数据(CV_8UC3),或者是无数的其他类型的元素——那么mat的内部结构也就不同,从step来说,我的理解step是一行所占的内存空间,mat1是无符号3通道,即内部的数据类型应该是unsigned char,即占用1个字节每个单元,mat2则是float,4个字节每单元,也就是说mat2同等数据个数,其空间大小是mat1的四倍,这也正好由step验证。
从ipl这一端来看,ipl的imageData数据类型为unsigned char*,那么如果把数据转到mat2中的话,则要涉及到一个强制转换,unsigned char 转为 float,按照常识,一般都是以强转为0收尾。所以为了ipl转mat成功,将type声明为CV_8UC3是必须的。
三通道转换成功,便自然想到一通道的灰度图转换。
其代码如下:实验证明,这是成功的。
void ReadIpl2Mat()
{
int temp1, temp2;
int row, col; IplImage *img = cvLoadImage("11.jpg",1);
IplImage *pImgGray = cvCreateImage(cvGetSize(img), img->depth, 1);
uchar *pImg, *pMat;
CvMat *mat1; cvCvtColor(img, pImgGray, CV_BGR2GRAY);
mat1 = cvCreateMat(pImgGray->height, pImgGray->width, CV_8UC1);
cvConvert(pImgGray, mat1); for ( row=0; row<mat1->rows; row++)
{
pImg = (char*)(pImgGray->imageData + row*pImgGray->widthStep);
pMat = (char*)(mat1->data.ptr + row*mat1->step);
for(col=0; col<mat1->cols; col++)
{
temp2 = *(pImg+col);
temp1 = *(pMat+col);
}
}
}
最新文章
- Android二维码的生成,解析以及扫描功能
- 让你的站点也支持MarkDown
- 【腾讯Bugly干货分享】Android ListView与RecyclerView对比浅析--缓存机制
- thinkphp中文验证码不能显示的问题
- selenium python (六)定位一组对象
- css制作导航栏的上下三角
- css属性之!important
- JQuery插件使用小结
- Delphi Math里的基本函数,以及浮点数比较函数(转)
- webpack编译流程漫谈
- 【编程技巧】addSubview和insertSubview的区别
- linux退出状态码及exit命令
- DDGScreenShot--iOS 图片处理--多图片拼接 (swift)
- Node.js web发布到AWS ubuntu 之后,关闭Putty,Node 项目也随之关闭的解决办法
- Pentaho data integration(kettle) 在Mac上启动不了
- react与vue的对比
- linux达人养成计划学习笔记(四)—— 压缩命令
- hadoop学习笔记(三):hadoop文件结构
- cstring、string、wstring、int、char*、tchar、 int、dword等相互转换代码输出测试
- 多产生半成品工单的问题 修改带SO的半成品工单无法分配给SO的问题的