aboutsummaryrefslogtreecommitdiff
path: root/redist/minimal_opencv.c
diff options
context:
space:
mode:
authorJustin Berger <jdavidberger@gmail.com>2018-07-01 04:13:34 +0000
committerJustin Berger <jdavidberger@gmail.com>2018-07-01 04:13:34 +0000
commit47141c873ffd3d7af62bfba40b1adbcce0df6574 (patch)
tree245575a52f46b7fdd163b264eb17ee74863d0c28 /redist/minimal_opencv.c
parent70ac578a3edfdac2223bb0419445621cfb153c72 (diff)
downloadlibsurvive-47141c873ffd3d7af62bfba40b1adbcce0df6574.tar.gz
libsurvive-47141c873ffd3d7af62bfba40b1adbcce0df6574.tar.bz2
Finalized reading in and transforming of accel/gyro data
Diffstat (limited to 'redist/minimal_opencv.c')
-rw-r--r--redist/minimal_opencv.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/redist/minimal_opencv.c b/redist/minimal_opencv.c
index c9cacf3..da7681c 100644
--- a/redist/minimal_opencv.c
+++ b/redist/minimal_opencv.c
@@ -374,3 +374,26 @@ SURVIVE_LOCAL_ONLY void cvReleaseMat(CvMat **mat) {
free(*mat);
*mat = 0;
}
+
+SURVIVE_LOCAL_ONLY double cvDet(const CvMat *M) {
+ assert(M->rows == M->cols);
+ assert(M->rows <= 3 && "cvDet unimplemented for matrices >3");
+ assert(CV_64F == CV_MAT_TYPE(M->type) && "cvDet unimplemented for float");
+ double *m = M->data.db;
+
+ switch (M->rows) {
+ case 1:
+ return m[0];
+ case 2: {
+ return m[0] * m[3] - m[1] * m[2];
+ }
+ case 3: {
+ double m00 = m[0], m01 = m[1], m02 = m[2], m10 = m[3], m11 = m[4], m12 = m[5], m20 = m[6], m21 = m[7],
+ m22 = m[8];
+
+ return m00 * (m11 * m22 - m12 * m21) - m01 * (m10 * m22 - m12 * m20) + m02 * (m10 * m21 - m11 * m20);
+ }
+ default:
+ abort();
+ }
+}