How to catch native OpenCV’s errors code (CVException handling)
In order to display the native opencv’s error code, please enclose the code in Utils.setDebugMode(true) and Utils.setDebugMode(false).
Example Code:
//
// CVException handling example
//
// 32F, channels=1, 3x3
Mat m1 = new Mat (3, 3, CvType.CV_32FC1);
m1.put (0, 0, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f);
// 8U, channels=1, 3x3
Mat m2 = new Mat (3, 3, CvType.CV_8UC1);
m2.put (0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
// dump
Debug.Log (""m1="" + m1);
Debug.Log (""m1.dump()="" + m1.dump ());
Debug.Log (""m2="" + m2);
Debug.Log (""m2.dump()="" + m2.dump ());
#if UNITY_STANDALONE || UNITY_EDITOR
// Publish CVException to Debug.LogError.
Utils.setDebugMode (true, false);
Mat m3 = m1 / m2;
Utils.setDebugMode (false);
// Throw CVException.
Utils.setDebugMode (true, true);
try
{
Mat m4 = m1 / m2;
}
catch (Exception e)
{
Debug.Log (""CVException: "" + e);
}
Utils.setDebugMode (false);
#else
Debug.Log (""The setDebugMode method is only supported on WIN, MAC and LINUX."");
#endif
Execution Result:
m1=Mat [ 3*3*CV_32FC1, isCont=True, isSubmat=False, nativeObj=0x820637680, dataAddr=0x820295296 ] m1.dump()=[1, 2, 3; 4, 5, 6; 7, 8, 9] m2=Mat [ 3*3*CV_8UC1, isCont=True, isSubmat=False, nativeObj=0x820637792, dataAddr=0x820619712 ] m2.dump()=[ 1, 2, 3; 4, 5, 6; 7, 8, 9] core::divide_12() : OpenCV(3.4.1-dev) C:\Users\xxxxx\Desktop\opencv\modules\core\src\arithm.cpp:683: error: (-5) When the input arrays in add/subtract/multiply/divide functions have different types, the output array type must be explicitly specified in function cv::arithm_op m3=Mat [ 0*0*CV_8UC1, isCont=False, isSubmat=False, nativeObj=0x820637568, dataAddr=0x0 ] CVException: OpenCVForUnity.CvException: core::divide_12() : OpenCV(3.4.1-dev) C:\Users\satoo\Desktop\opencv\modules\core\src\arithm.cpp:683: error: (-5) When the input arrays in add/subtract/multiply/divide functions have different types, the output array type must be explicitly specified in function cv::arithm_op