近期将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;
详细的原因是: 操作取了暂时变量的地址,返回后暂时变量已经“消失”了。你不能再使用。
好的,问题就算攻克了。代码最终移植过来了!