Ask Your Question
0

sigsegv on android jni using grabCut

asked Jan 16 '14

dianull gravatar image

updated Nov 7 '0

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.

Preview: (hide)

1 answer

Sort by » oldest newest most voted
0

answered Jan 19 '14

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);
Preview: (hide)

Question Tools

Stats

Asked: Jan 16 '14

Seen: 422 times

Last updated: Jan 19 '14