c++opencv项目移植到Android(Mat—》IplImage*)
2015-06-29 17:21
288 查看
最近将PC机上的行人检测的C++项目移植到Android平台遇到很多的问题,因此,记录一些重点。
1. 最好可以参照Opencv sample 里面的mix-processing。
2. 数据结构的问题:尤其是 将从java得到的Mat数据转化为IplImage*。这个会有很多的问题。网上大概的方法是:
但是,对我来说都不好用,我也不知道为什么。于是继续探索,出现了这个问题: taking address of temporary [-fpermissive]
最终找到了解决方案:
具体的原因是: 操作取了临时变量的地址,返回后临时变量已经“消失”了,你不能再使用。
好的,问题就算解决了。代码终于移植过来了!
1. 最好可以参照Opencv sample 里面的mix-processing。
2. 数据结构的问题:尤其是 将从java得到的Mat数据转化为IplImage*。这个会有很多的问题。网上大概的方法是:
//第一种转换方式 error IplImage *imgIpl1 = cvCreateImage(cvSize(w, h), 8, 3); Mat temp = preMat.clone(); imgIpl1->imageData = (char *)temp.data; //第二种转换方式 IplImage imgIpl2 = preMat.operator _IplImage(); //第三种转换方式 IplImage imgIpl3 = (IplImage)(preMat); //第四种转换方式 IplImage *imgIpl4 = &IplImage(preMat); //第五种转换方式 Mat imgtemp; imgtemp =mGr.clone(); imgshow=cvCreateImage(cvSize(mGr.cols,mGr.rows),8,3); imgshow.imageData=(char*)imgtemp.data;
但是,对我来说都不好用,我也不知道为什么。于是继续探索,出现了这个问题: taking address of temporary [-fpermissive]
最终找到了解决方案:
Mat& mGr = *(Mat*)addrGray; IplImage temp = (IplImage)mGr; IplImage *imgshow =&temp;
具体的原因是: 操作取了临时变量的地址,返回后临时变量已经“消失”了,你不能再使用。
好的,问题就算解决了。代码终于移植过来了!
相关文章推荐
- C语言的作用域规则
- 集合的模拟实现(函数模板)
- 一些C++11语言新特性 - Range-Based for Loops
- C/C++求职宝典21个重点笔记(常考笔试面试点)
- 黑马程序员-OC语言-对象和方法之间的关系(听课笔记)
- 一些C++11语言新特性 - Uniform Initialization
- OC语言学习1
- C语言指针访问数组元素
- C++设计模式之工厂方法模式
- C++ GUI Qt4学习笔记(一)
- c++类的改进
- 黑马程序员——C语言之函数与手动编译执行C程序
- 双向循环链表(c++实现)
- C语言指针
- C++ const面试题和相关的解释
- 汉字字频统计程序(Python版+C语言版)
- C++静态数组和动态数组的区别
- C语言判断某个年份是否是闰年
- C++第六章 习题
- 《thinking in c++》Volume 1知识点总结(二)