Commit f9fc180e authored by Vadim Pisarevsky's avatar Vadim Pisarevsky

fixed tickets #1117 and #954

parent 1ebdfa49
...@@ -1284,7 +1284,7 @@ void CvEM::getCovs(vector<Mat>& _covs) const ...@@ -1284,7 +1284,7 @@ void CvEM::getCovs(vector<Mat>& _covs) const
int i, n = params.nclusters; int i, n = params.nclusters;
_covs.resize(n); _covs.resize(n);
for( i = 0; i < n; i++ ) for( i = 0; i < n; i++ )
_covs[i] = Mat(covs[i]); Mat(covs[i]).copyTo(_covs[i]);
} }
Mat CvEM::getWeights() const Mat CvEM::getWeights() const
......
...@@ -2860,10 +2860,6 @@ static PyObject *fromarray(PyObject *o, int allowND) ...@@ -2860,10 +2860,6 @@ static PyObject *fromarray(PyObject *o, int allowND)
type = CV_16SC1; type = CV_16SC1;
else if (pai->itemsize == 4) else if (pai->itemsize == 4)
type = CV_32SC1; type = CV_32SC1;
else if (pai->itemsize == 8) {
PyErr_SetString(PyExc_TypeError, "OpenCV cannot handle 64-bit integer arrays");
return NULL;
}
break; break;
case 'u': case 'u':
...@@ -2879,9 +2875,12 @@ static PyObject *fromarray(PyObject *o, int allowND) ...@@ -2879,9 +2875,12 @@ static PyObject *fromarray(PyObject *o, int allowND)
else if (pai->itemsize == 8) else if (pai->itemsize == 8)
type = CV_64FC1; type = CV_64FC1;
break; break;
}
if (type == -1) {
PyErr_SetString(PyExc_TypeError, "the array type is not supported by OpenCV");
return NULL;
} }
assert(type != -1);
if (!allowND) { if (!allowND) {
cvmat_t *m = PyObject_NEW(cvmat_t, &cvmat_Type); cvmat_t *m = PyObject_NEW(cvmat_t, &cvmat_Type);
......
...@@ -237,7 +237,7 @@ static PyObject* pyopencv_from(const Mat& m) ...@@ -237,7 +237,7 @@ static PyObject* pyopencv_from(const Mat& m)
Mat temp, *p = (Mat*)&m; Mat temp, *p = (Mat*)&m;
if(!p->refcount || p->allocator != &g_numpyAllocator) if(!p->refcount || p->allocator != &g_numpyAllocator)
{ {
pyopencv_to(Py_None, temp); temp.allocator = &g_numpyAllocator;
m.copyTo(temp); m.copyTo(temp);
p = &temp; p = &temp;
} }
...@@ -484,7 +484,7 @@ template<typename _Tp> struct pyopencvVecConverter ...@@ -484,7 +484,7 @@ template<typename _Tp> struct pyopencvVecConverter
static bool to(PyObject* obj, vector<_Tp>& value, const char* name="<unknown>") static bool to(PyObject* obj, vector<_Tp>& value, const char* name="<unknown>")
{ {
typedef typename DataType<_Tp>::channel_type _Cp; typedef typename DataType<_Tp>::channel_type _Cp;
if(!obj) if(!obj || obj == Py_None)
return true; return true;
if (PyArray_Check(obj)) if (PyArray_Check(obj))
{ {
...@@ -596,6 +596,8 @@ static PyObject* pyopencv_from(const KeyPoint&); ...@@ -596,6 +596,8 @@ static PyObject* pyopencv_from(const KeyPoint&);
template<typename _Tp> static inline bool pyopencv_to_generic_vec(PyObject* obj, vector<_Tp>& value, const char* name="<unknown>") template<typename _Tp> static inline bool pyopencv_to_generic_vec(PyObject* obj, vector<_Tp>& value, const char* name="<unknown>")
{ {
if(!obj || obj == Py_None)
return true;
if (!PySequence_Check(obj)) if (!PySequence_Check(obj))
return false; return false;
PyObject *seq = PySequence_Fast(obj, name); PyObject *seq = PySequence_Fast(obj, name);
...@@ -619,13 +621,13 @@ template<typename _Tp> static inline bool pyopencv_to_generic_vec(PyObject* obj, ...@@ -619,13 +621,13 @@ template<typename _Tp> static inline bool pyopencv_to_generic_vec(PyObject* obj,
template<typename _Tp> static inline PyObject* pyopencv_from_generic_vec(const vector<_Tp>& value) template<typename _Tp> static inline PyObject* pyopencv_from_generic_vec(const vector<_Tp>& value)
{ {
int i, n = (int)value.size(); int i, n = (int)value.size();
PyObject* seq = PyTuple_New(n); PyObject* seq = PyList_New(n);
for( i = 0; i < n; i++ ) for( i = 0; i < n; i++ )
{ {
PyObject* item = pyopencv_from(value[i]); PyObject* item = pyopencv_from(value[i]);
if(!item) if(!item)
break; break;
PyTuple_SET_ITEM(seq, i, item); PyList_SET_ITEM(seq, i, item);
} }
if( i < n ) if( i < n )
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment