]> rtime.felk.cvut.cz Git - opencv.git/commitdiff
getSubRect etc no longer take sub rect input
authorjamesbowman <jamesbowman@73c94f0f-984f-4a5f-82bc-2d8db8d8ee08>
Tue, 15 Sep 2009 22:38:06 +0000 (22:38 +0000)
committerjamesbowman <jamesbowman@73c94f0f-984f-4a5f-82bc-2d8db8d8ee08>
Tue, 15 Sep 2009 22:38:06 +0000 (22:38 +0000)
git-svn-id: https://code.ros.org/svn/opencv/trunk@2131 73c94f0f-984f-4a5f-82bc-2d8db8d8ee08

opencv/interfaces/python/CMakeLists.txt
opencv/interfaces/python/api
opencv/interfaces/python/cv.cpp
opencv/interfaces/python/gen.py
opencv/tests/python/test.py

index df237621810f6b61ab574a09a332d5906ee40bc0..2f65c3093ed8f2c23aeef77ca68b31463913710d 100644 (file)
@@ -17,6 +17,7 @@ add_custom_command(
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated0.i
    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/gen.py ${CMAKE_CURRENT_SOURCE_DIR}
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/api
+   DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/gen.py
    )
 
 set(the_target "cvpy")
index 3da175536ee66df81c0f6c2d874a6712700d7cda..c97bf0084fc9342220e753f9378a7d44466f60ed 100644 (file)
@@ -253,30 +253,30 @@ Load generic
 # Accessing Elements and sub-Arrays
 GetRow
   CvArr arr
-  CvMat submat /J:arr
+  CvMat submat /J:arr,O,A
   int row
 GetRows submat
   CvArr arr
-  CvMat submat /J:arr
+  CvMat submat /J:arr,O,A
   int start_row
   int end_row
   int delta_row -1
 GetCol submat
   CvArr arr
-  CvMat submat /J:arr
+  CvMat submat /J:arr,O,A
   int col
 GetCols submat
   CvArr arr
-  CvMat submat /J:arr
+  CvMat submat /J:arr,O,A
   int start_col
   int end_col
 GetDiag submat
   CvArr arr
-  CvMat submat /J:arr
+  CvMat submat /J:arr,O,A
   int diag 0
 GetSubRect submat
   CvArr arr
-  CvMat submat /J:arr
+  CvMat submat /J:arr,O,A
   CvRect rect
 GetSize CvSize
   CvArr arr
index 00f26af4814c38fbb909702aa803a773a3ba99af..a52c62aa249d25af961231681e127ba699f7b064 100644 (file)
@@ -3189,8 +3189,15 @@ static PyObject *pycvFindChessboardCorners(PyObject *self, PyObject *args, PyObj
 // make recipient use the donor's data, compute the offset,
 // and manage reference counts.
 
-static PyObject *shareData(PyObject *donor, CvArr *pdonor, PyObject *recipient, CvMat *precipient)
+static void preShareData(CvArr *donor, CvMat **recipient)
 {
+  *recipient = cvCreateMatHeader(4, 4, cvGetElemType(donor));
+}
+
+static PyObject *shareData(PyObject *donor, CvArr *pdonor, CvMat *precipient)
+{
+  PyObject *recipient = (PyObject*)PyObject_NEW(cvmat_t, &cvmat_Type);
+  ((cvmat_t*)recipient)->a = precipient;
   ((cvmat_t*)recipient)->offset = cvPtr1D(precipient, 0) - cvPtr1D(pdonor, 0);
 
   PyObject *arr_data;
@@ -3201,10 +3208,8 @@ static PyObject *shareData(PyObject *donor, CvArr *pdonor, PyObject *recipient,
   } else {
     return (PyObject*)failmsg("Argument 'mat' must be either IplImage or CvMat");
   }
-  Py_DECREF(((cvmat_t*)recipient)->data);
   ((cvmat_t*)recipient)->data = arr_data;
   Py_INCREF(arr_data);
-  Py_INCREF(recipient);
   return recipient;
 }
 
index e7bdfbb3450c9670903424ef15a44eebd0bd63c6..562f7fdea21b2b9a22e0e566179c1d08f807f77a 100644 (file)
@@ -163,6 +163,9 @@ def gen(name, args, ty):
 
   # Do the conversions:
   for a in args:
+    joinwith = [f[2:] for f in a.flags if f.startswith("J:")]
+    if len(joinwith) > 0:
+      yield 'preShareData(%s, &%s);' % (joinwith[0], a.nm)
     if 'O' in a.flags:
       continue
     if a.ty in (conversion_types + aggregate.keys()):
@@ -246,7 +249,7 @@ def gen(name, args, ty):
         af = dict([ (a.nm,a.flags) for a in args])
         joinwith = [f[2:] for f in af.get(all_returns[0], []) if f.startswith("J:")]
         if len(joinwith) > 0:
-            yield '  return shareData(pyobj_%s, %s, pyobj_%s, %s);' % (joinwith[0], joinwith[0], all_returns[0], all_returns[0])
+            yield '  return shareData(pyobj_%s, %s, %s);' % (joinwith[0], joinwith[0], all_returns[0])
         else:
             yield '  return FROM_%s(%s);' % (safename(typed[all_returns[0]]), all_returns[0])
       else:
index 2a2f9e3c26d6720a0ff2a95adf9818cd99d90539..f57d99533e0a47b80ba6b1efd1004da1639034b6 100644 (file)
@@ -424,8 +424,7 @@ class TestDirected(unittest.TestCase):
         iter = 77
         subs = []
         for i in range(iter):
-            sub = cv.CreateMat(10, 10, cv.CV_8UC1)
-            cv.GetSubRect(src, sub, (0, 0, 10, 10))
+            sub = cv.GetSubRect(src, (0, 0, 10, 10))
             subs.append(sub)
         self.assert_(sys.getrefcount(data) == (start_count + iter))
 
@@ -434,7 +433,7 @@ class TestDirected(unittest.TestCase):
         sub = cv.CreateMat(32, 32, cv.CV_8UC1)
         for x in range(0, 512, 32):
             for y in range(0, 512, 32):
-                cv.GetSubRect(src, sub, (x, y, 32, 32))
+                sub = cv.GetSubRect(src, (x, y, 32, 32))
                 cv.SetImageROI(made, (x, y, 32, 32))
                 cv.Copy(sub, made)
         cv.ResetImageROI(made)