[問題] JNI做影像一維陣列掃描

看板AndroidDev作者 (琴酒)時間13年前 (2013/02/03 15:22), 編輯推噓0(003)
留言3則, 2人參與, 最新討論串1/1
各位大大好, 小弟最近在研究android手機、想把我原本C的 影像處理演算法放在JNI C的部份做處理。 我的影像是存成一維陣列的型式 ex: mat[240*320]這種樣子 但是我在做前後張相減的時後app 開一下下就會瞬間跳掉 因為我的程式需要記住前後張畫面的值(x,y座標)、 所以我有些需要記值的變數從上層(JNI C)宣告成static 然後pass by value給到我的演算法(自己寫的void function)來處理 在我逐步debug後發現在兩個陣列做比較時就會導致App跳出... 後來我用個cnt來計數看值正不正常,沒想到值居然怪怪的 部份程式碼如下: void functiontest(int width, int height, unsigned char* dst1, unsigned char* dst2){ int i,j; unsigned char * matNEW = dst1; unsigned char * matOLD = dst2; int cnt =0; for(i=0;i<height;i++) for(j=0;j<width;j++){ if (matNEW[i*width+j] >= matOLD[i*width+j]) cnt = cnt +1; } } 其中height以及width都是從Java透過JNI傳過來的camera preview size大小 我用logcat看過、都一直是320*240 照理來說cnt應該會一直正常的數到76800然後歸0重複,但我再用logcat看過後 有時後cnt的值會亂跳 ex:從4209 忽然跳到4546... 這樣我的i跟j值跟本不對、我在猜這可能是導致我app跳掉的原因 不知道有沒有大大了解這方面的問題? 還是說JNI不可以用這樣的方式來做影像掃描? 我有看過網路openCV的一些範例、感覺上也跟我寫的大同小異 範例: int j, yp, i, y; for (j = 0, yp = 0; j < height; ++j) { for (i = 0; i < width; ++i, ++yp) { y = (0xff & ((int) yuv420sp[yp])) - 16; } } 不太清楚到底是什麼原因....有大大可以幫忙分析嗎@@...感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.18.102.91 ※ 編輯: rayallen3001 來自: 163.18.102.91 (02/03 15:23)

02/04 15:20, , 1F
好像是因為LOGI print的時間跟計數對不上才會這樣
02/04 15:20, 1F

02/04 15:21, , 2F
這邊自己解決了,但是影像跳掉的結果還是不知道原因
02/04 15:21, 2F

02/25 13:38, , 3F
確定一下你JAVA要呼叫到JNI FUNC時參數有無過大0~255?
02/25 13:38, 3F
文章代碼(AID): #1H3X0_uP (AndroidDev)