Ask Your Question

sigsegv on android jni using grabCut

asked 2014-01-16 14:18:44 -0600

dianull gravatar image

updated 2020-11-07 02:07:21 -0600

Hi there

I've got this piece of code:

Mat src;
src = imread(argv[1]);
Rect rectangle(10, 10, src.cols - 5, src.rows - 5)
Mat result, fgModel, bgModel;
grabCut(src, result, rectangle, bgModel, fgModel, 2, GC_INIT_WITH_RECT);
compare(result, GC_PR_FGD,result,CMP_EQ);
Mat foreground(src.size(),CV_8UC3, Scalar(255,255,255));
src.copyTo(foreground, result);

which works fine except on Android, when it results in "signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad". It's called from jni method and looks pretty much the same as in my desktop app, where it doesn't crush. Any ideas?

[edit] I was thinking maybe it has something to do with android RGBA format? What imread() opens is an image saved as a jpg file (a picture taken from camera) . Maybe its format is what grabCut doesn't accept as a source? I tried converting it to CV_8UC3 but the result is the same.

edit retag flag offensive close merge delete

1 answer

Sort by ยป oldest newest most voted

answered 2014-01-19 05:16:39 -0600

dianull gravatar image

Ok, it seems like the solution was simply to resize the input image. It was a high resolution image and shrinking made it reasonable input for grabcut.

resize(src, dst, Size(src.cols / 5, src.rows / 5), 0, 0, CV_INTER_AREA);
edit flag offensive delete link more

Question Tools


Asked: 2014-01-16 14:18:44 -0600

Seen: 345 times

Last updated: Jan 19 '14