IpIImage -> CvMat 转换方法
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);
}
}
}
IpIImage -> CvMat 转换方法的更多相关文章
- IplImage, CvMat, Mat 的关系和相互转换(转)
(看到的一篇非常好的文章,讲opencv内部类之间的关系的.) opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,Mat类型侧重 ...
- IplImage, CvMat, Mat 的关系
IplImage, CvMat, Mat 的关系 转载来源:http://www.cnblogs.com/summerRQ/articles/2406109.html opencv中常见的与图像操作有 ...
- opencv学习笔记(一)IplImage, CvMat, Mat 的关系
opencv学习笔记(一)IplImage, CvMat, Mat 的关系 opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,M ...
- opencv----(1) mat最好用,和IplImage,cvmat 比较
学习了几天,发现mat比IplImage,cvmat 好用太多了. 不知道确切的原文出处,我是转自新浪的一篇博文:http://blog.sina.com.cn/s/blog_534497fd0101 ...
- [转] IplImage, CvMat, Mat 的关系
拼装小火车 的原文 IplImage, CvMat, Mat 的关系 opencv中常见的 与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,Mat ...
- OpenCV中IplImage/CvMat/Mat转化关系
原文链接:http://www.cnblogs.com/summerRQ/articles/2406109.html 如对内容和版权有何疑问,请拜访原作者或者通知本人. opencv中常见的与图像操作 ...
- Opencv 的数据结构
opencv的基本数据结构 结构 成员 意义 CvPoint int x,y 图像中的点 CvPoint2D32f float x,y 二维空间中的点 CvPoint3D32f float x,y,z ...
- opencvbase 实现opencv打开摄像头和初步处理等效果操作(附源码)
// TwoCameraOnTimer2Dlg.cpp : 实现文件 /* CvMat, Mat, IplImage之间的互相转换 IpIImage -> CvMat CvMat mathead ...
- OpenCV2:第一章 图像表示
一.简介 在OpenCV中,可以用C++语法的Mat类来表示一张图像 也可以用C语法的lpllmage或CvMat结构体来表示一张图像 1.单通道像素值 2.多通道像素值 OpenCV默认颜色顺序为B ...
随机推荐
- QT应用程序 安装路径中文异常问题
[1]QT 安装中文路径启动异常问题 最近在搞一个很简单的QT应用程序,开发环境VS2017 + QT5.9,线上异常报错:安装中文路径下启动崩溃~~~~ 最后,本地调试Debug版本,发现安装中文路 ...
- 基于HttpClient实现网络爬虫~以百度新闻为例
转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/40891791 基于HttpClient4.5实现网络爬虫请訪问这里:http:/ ...
- eclipse 连接 hadoop集群
1 网上找插件 或者 自己编译 放到eclipse plugin里面 2 重启eclipse 配置MapReduceLocation 通吃端口为9001 9000 看你自己的配置 3 新建mapRed ...
- unity 常用的几种相机跟随
固定相机跟随 这种相机有一个参考对象,它会保持与该参考对象固定的位置,跟随改参考对象发生移动 using UnityEngine; using System.Collections; public c ...
- USB设备驱动程序(一)
USB驱动编程原理: 当我们把USB设备插入USB口时会提示需要安装相对应的驱动,如USB鼠标.USB键盘等,这些电脑自己自身已经自带有相对于的驱动程序, 当电脑检查到该USB设备类型相同就去帮你安装 ...
- 【BZOJ3488】[ONTAK2010]Highways 扫描线+树状数组
[BZOJ3488][ONTAK2010]Highways Description 给一棵n个点的树以及m条额外的双向边q次询问,统计满足以下条件的u到v的路径:恰经过一条额外的边不经过树上u到v的路 ...
- MATLAB循环结构:while语句P69范数待编
while语句的一般格式为: while 条件 循环体语句 end 从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们的和. 程序如下: sum=; n=; x=input('输入一个数字 ...
- 开启貌似已经过时很久的新坑:SharePoint服务器端对象模型
5年前(嗯,是5年前),SharePoint 2010刚发布的时候,曾经和kaneboy试图一起写一本关于SharePoint 2010开发的书,名字叫<SharePoint 2010 应用开发 ...
- linux shell 中数组使用方法介绍
linux shell在编程方面比windows 批处理强大太多,不管是在循环.运算.已经数据类型方面都是不能比較的. 以下是个人在使用时候,对它在数组方面一些操作进行的总结. 1.数组定义 [che ...
- iOS 当前应用或者浏览器中 唤起 手机其他应用
这种方法 是 产品很常见的需求,关键 是在info.plist URL types 设置对应属性 比如 里面 子属性 URL identifier 设置成 bundle id //设置应用指向 ...