您的位置:首页 > 编程语言 > C语言/C++

c++opencv项目移植到Android(Mat—》IplImage*)

2015-06-29 17:21 288 查看
最近将PC机上的行人检测的C++项目移植到Android平台遇到很多的问题,因此,记录一些重点。

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;


具体的原因是: 操作取了临时变量的地址,返回后临时变量已经“消失”了,你不能再使用。

好的,问题就算解决了。代码终于移植过来了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: