From 570041fed51fe1becc8ea875e970970c052c2411 Mon Sep 17 00:00:00 2001 From: Leonid Beynenson Date: Sat, 16 Jul 2011 13:29:20 +0000 Subject: [PATCH] Fixed bug in modules/java/src/cpp/Mat.cpp Removed some debugging insertions. Added test for face detector. Allowed tests to write on sdcard. --- modules/java/android_test/AndroidManifest.xml | 2 +- .../org/opencv/test/objdetect/objdetectTest.java | 16 +++++++++++++--- modules/java/src/cpp/Mat.cpp | 3 ++- modules/java/src/cpp/utils.cpp | 4 ---- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/modules/java/android_test/AndroidManifest.xml b/modules/java/android_test/AndroidManifest.xml index 800758f57..337afabdc 100644 --- a/modules/java/android_test/AndroidManifest.xml +++ b/modules/java/android_test/AndroidManifest.xml @@ -14,5 +14,5 @@ - + \ No newline at end of file diff --git a/modules/java/android_test/src/org/opencv/test/objdetect/objdetectTest.java b/modules/java/android_test/src/org/opencv/test/objdetect/objdetectTest.java index ee6592cf2..38549870b 100644 --- a/modules/java/android_test/src/org/opencv/test/objdetect/objdetectTest.java +++ b/modules/java/android_test/src/org/opencv/test/objdetect/objdetectTest.java @@ -4,18 +4,18 @@ import java.util.ArrayList; import org.opencv.Mat; import org.opencv.objdetect; -import org.opencv.imgproc; import org.opencv.highgui; import org.opencv.core; import org.opencv.test.OpenCVTestCase; import org.opencv.test.OpenCVTestRunner; import org.opencv.Rect; import org.opencv.Size; +import org.opencv.Scalar; public class objdetectTest extends OpenCVTestCase { public void testCascadeClassifierFaceDetector() { - //objdetect.CascadeClassifier cc=new objdetect.CascadeClassifier("/mnt/sdcard/lbpcascade_frontalface.xml"); - objdetect.CascadeClassifier cc=new objdetect.CascadeClassifier("/mnt/sdcard/haarcascade_frontalface_alt2.xml"); + objdetect.CascadeClassifier cc=new objdetect.CascadeClassifier("/mnt/sdcard/lbpcascade_frontalface.xml"); + ///objdetect.CascadeClassifier cc=new objdetect.CascadeClassifier("/mnt/sdcard/haarcascade_frontalface_alt2.xml"); ArrayList faces=new ArrayList(); @@ -24,6 +24,16 @@ public class objdetectTest extends OpenCVTestCase { cc.detectMultiScale(shot002, faces, 1.1, 2, 2 /*TODO: CV_HAAR_SCALE_IMAGE*/, new Size(10,10)); OpenCVTestRunner.Log("faces.size="+faces.size()); + + Scalar color=new Scalar(0,255,0); + for(int i=0; i < faces.size(); i++) { + OpenCVTestRunner.Log("face["+i+"]="+faces.get(i).toString()); + core.rectangle(shot002, faces.get(i).tl(), faces.get(i).br(), color); + } + OpenCVTestRunner.Log("before writing image"); + boolean reswrite=highgui.imwrite("/mnt/sdcard/lbpcascade_frontalface_res.jpg", shot002); + OpenCVTestRunner.Log("after writing image, res="+reswrite); + } diff --git a/modules/java/src/cpp/Mat.cpp b/modules/java/src/cpp/Mat.cpp index df8c7d321..0f860b44a 100644 --- a/modules/java/src/cpp/Mat.cpp +++ b/modules/java/src/cpp/Mat.cpp @@ -231,6 +231,7 @@ template int mat_get(cv::Mat* m, int row, int col, int count, char* if(! m) return 0; if(! buff) return 0; + count *= sizeof(T);//This change is required, checked TODO: recheck for non-continious case int rest = ((m->rows - row) * m->cols - col) * m->channels() * sizeof(T); if(count>rest) count = rest; int res = count; @@ -243,7 +244,7 @@ template int mat_get(cv::Mat* m, int row, int col, int count, char* int num = (m->cols - col - 1) * m->channels() * sizeof(T); // 1st partial row if(countptr(row++, col); - while(count>0){ + while(count>0){//TODO: recheck this cycle for the case col!=0 memcpy(buff, data, num); count -= num; buff += num; diff --git a/modules/java/src/cpp/utils.cpp b/modules/java/src/cpp/utils.cpp index 91b0e9fab..62ebdf9dc 100644 --- a/modules/java/src/cpp/utils.cpp +++ b/modules/java/src/cpp/utils.cpp @@ -91,7 +91,6 @@ void Mat_to_vector_uchar(cv::Mat& mat, std::vector& v_uchar) void Mat_to_vector_Rect(Mat& mat, vector& v_rect) { - LOGD("Mat_to_vector_Rect start, mat.cols=%d", mat.cols); v_rect.clear(); if(mat.type()!= CV_32SC4 || mat.rows!=1) { @@ -103,17 +102,14 @@ void Mat_to_vector_Rect(Mat& mat, vector& v_rect) Vec v=mat.at< Vec >(0, i); v_rect.push_back( Rect(v[0], v[1], v[2], v[3]) ); } - LOGD("Mat_to_vector_Rect end, vec.size=%d", (int)v_rect.size()); } void vector_Rect_to_Mat(vector& v_rect, Mat& mat) { - LOGD("vector_Rect_to_Mat start, vec.size=%d", (int)v_rect.size()); mat.create(1, v_rect.size(), CV_32SC4); for(size_t i=0; i >(0, i) = Vec(v_rect[i].x, v_rect[i].y, v_rect[i].width, v_rect[i].height); } - LOGD("vector_Rect_to_Mat end, mat.cols=%d", mat.cols); }