OpenCV Android crashes on Imgproc.cvtColor().
I have questions about OpenCV4Android.
java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.example.camtime/com.fognature.develop.smp.CameraActivity}:
CvException [org.opencv.core.CvException: cv::Exception:
/hdd2/buildbot/slaves/slave_ardbeg1/50-SDK/opencv/modules/imgproc/src/color.cpp:3739:
error: (-215) scn == 3 || scn == 4 in function void
cv::cvtColor(cv::InputArray, cv::OutputArray, int, int)
]
at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2320)
at
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2380)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1285)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5289)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: CvException [org.opencv.core.CvException: cv::Exception:
/hdd2/buildbot/slaves/slave_ardbeg1/50-SDK/opencv/modules/imgproc/src/color.cpp:3739:
error: (-215) scn == 3 || scn == 4 in function void
cv::cvtColor(cv::InputArray, cv::OutputArray, int, int)
]
at org.opencv.imgproc.Imgproc.cvtColor_1(Native Method)
at org.opencv.imgproc.Imgproc.cvtColor(Imgproc.java:4598)
at
com.fognature.develop.smp.CameraActivity.onCreate(CameraActivity.java:108)
at android.app.Activity.performCreate(Activity.java:6018)
at
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2273)
… 10 more
In this code section:
Mat sec;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sec = new Mat();
setContentView(R.layout.activity_camera);
File photo = new File(Environment.getExternalStorageState()
+File.separator+"SMP"+File.separator+getIntent().getStringExtra("c_name")+File.separator+getIntent().getStringExtra("last_photo"));
sec = Highgui.imread(photo.getAbsolutePath());
Imgproc.cvtColor(sec, sec, Imgproc.COLOR_RGBA2GRAY);
}
It is always in Imgproc.cvtColor(sec, sec, Imgproc.COLOR_RGBA2GRAY);
on crashing
Solution
The error states:
error: (-215) scn == 3 || scn == 4 in function void
cv::cvtColor(cv::InputArray, cv::OutputArray, int, int) ]
This usually means:
- When you try to convert
RGBA2GRAY
, the input Matsec
in this case has only 1 channel. You can confirm this by recordingsec.channels()
immediately after reading it. - It is also possible that the input Mat is empty or corrupted, and you can check sec.width,
sec.height, sec.depth< to confirm
properties such as to ensure that it is loaded correctly.