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);
}
}
}

  

最新文章

  1. Android二维码的生成,解析以及扫描功能
  2. 让你的站点也支持MarkDown
  3. 【腾讯Bugly干货分享】Android ListView与RecyclerView对比浅析--缓存机制
  4. thinkphp中文验证码不能显示的问题
  5. selenium python (六)定位一组对象
  6. css制作导航栏的上下三角
  7. css属性之!important
  8. JQuery插件使用小结
  9. Delphi Math里的基本函数,以及浮点数比较函数(转)
  10. webpack编译流程漫谈
  11. 【编程技巧】addSubview和insertSubview的区别
  12. linux退出状态码及exit命令
  13. DDGScreenShot--iOS 图片处理--多图片拼接 (swift)
  14. Node.js web发布到AWS ubuntu 之后,关闭Putty,Node 项目也随之关闭的解决办法
  15. Pentaho data integration(kettle) 在Mac上启动不了
  16. react与vue的对比
  17. linux达人养成计划学习笔记(四)—— 压缩命令
  18. hadoop学习笔记(三):hadoop文件结构
  19. cstring、string、wstring、int、char*、tchar、 int、dword等相互转换代码输出测试
  20. 多产生半成品工单的问题 修改带SO的半成品工单无法分配给SO的问题的

热门文章

  1. java后端技术
  2. java多线程实现复制大文件
  3. Java中的使用了未经检查或不安全的操作(类前加:@SuppressWarnings(&quot;unchecked&quot;))
  4. cnn 实例
  5. _DataStructure_C_Impl:图的最小生成树
  6. mybatis相关
  7. DNN自适应
  8. 执行后台任务的利器——Hangfire
  9. IaaS,PaaS,Saas 云服务的介绍
  10. ob 函数讲解