標籤:
最近將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;
具體的原因是: 操作取了臨時變數的地址,返回後臨時變數已經“消失”了,你不能再使用。
好的,問題就算解決了。代碼終於移植過來了!
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
c++opencv項目移植到Android(Mat—》IplImage*)