作者rayallen3001 (琴酒)
看板AndroidDev
标题[问题] JNI做影像一维阵列扫描
时间Sun Feb 3 15:22:32 2013
各位大大好, 小弟最近在研究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)
1F:→ rayallen3001:好像是因为LOGI print的时间跟计数对不上才会这样 02/04 15:20
2F:→ rayallen3001:这边自己解决了,但是影像跳掉的结果还是不知道原因 02/04 15:21
3F:→ dardar923:确定一下你JAVA要呼叫到JNI FUNC时参数有无过大0~255? 02/25 13:38