diff --git a/modules/python/src2/cv2.cv.hpp b/modules/python/src2/cv2.cv.hpp index cdd698f5a..0f20fe98f 100644 --- a/modules/python/src2/cv2.cv.hpp +++ b/modules/python/src2/cv2.cv.hpp @@ -238,47 +238,18 @@ static PyObject *iplimage_repr(PyObject *self) static PyObject *iplimage_tostring(PyObject *self, PyObject *args) { - iplimage_t *pc = (iplimage_t*)self; - IplImage *i; + IplImage *i=0; if (!convert_to_IplImage(self, &i, "self")) return NULL; if (i == NULL) return NULL; - int bps; - switch (i->depth) { - case IPL_DEPTH_8U: - case IPL_DEPTH_8S: - bps = 1; - break; - case IPL_DEPTH_16U: - case IPL_DEPTH_16S: - bps = 2; - break; - case IPL_DEPTH_32S: - case IPL_DEPTH_32F: - bps = 4; - break; - case IPL_DEPTH_64F: - bps = 8; - break; - default: - return failmsg("Unrecognised depth %d", i->depth), (PyObject*)0; - } - int bpl = i->width * i->nChannels * bps; - if (PyString_Check(pc->data) && bpl == i->widthStep && pc->offset == 0 && ((bpl * i->height) == what_size(pc->data))) { - Py_INCREF(pc->data); - return pc->data; - } else { - int l = bpl * i->height; - char *s = new char[l]; - int y; - for (y = 0; y < i->height; y++) { - memcpy(s + y * bpl, i->imageData + y * i->widthStep, bpl); - } - PyObject *r = PyString_FromStringAndSize(s, l); - delete[] s; - return r; - } + cv::Mat img(i); + size_t esz = img.elemSize(); + int nrows = img.rows, ncols = img.cols; + + if( !img.isContinuous() ) + img = img.clone(); + return PyString_FromStringAndSize((char*)img.data, (Py_ssize_t)(esz*nrows*ncols)); } static struct PyMethodDef iplimage_methods[] = diff --git a/modules/python/src2/gen2.py b/modules/python/src2/gen2.py index 4b9ecadd7..830c3784c 100644 --- a/modules/python/src2/gen2.py +++ b/modules/python/src2/gen2.py @@ -215,9 +215,11 @@ class ClassInfo(object): if decl: self.bases = decl[1].split()[1:] if len(self.bases) > 1: - print "Error: class %s has more than 1 base class (not supported by Python C extensions)" % (self.name,) + print "Warning: class %s has more than 1 base class (not supported by Python C extensions)" % (self.name,) print "Bases: ", self.bases - return sys.exit(-1) + print "Only the first base class will be used" + self.bases = self.bases[:1] + #return sys.exit(-1) for m in decl[2]: if m.startswith("="): self.wname = m[1:] diff --git a/modules/python/src2/hdr_parser.py b/modules/python/src2/hdr_parser.py index 48db3e32b..b2ab908af 100755 --- a/modules/python/src2/hdr_parser.py +++ b/modules/python/src2/hdr_parser.py @@ -235,7 +235,7 @@ class CppHeaderParser(object): modlist.append("=" + macro_arg) l = l[:npos] + l[npos3+1:] - l = self.batch_replace(l, [("CV_EXPORTS_W", ""), ("CV_EXPORTS", ""), ("public ", " "), ("::", ".")]).strip() + l = self.batch_replace(l, [("CV_EXPORTS_W", ""), ("CV_EXPORTS", ""), ("public virtual ", " "), ("public ", " "), ("::", ".")]).strip() ll = re.split(r'\s*[,:]?\s*', l) ll = [le for le in ll if le] classname = ll[1]