int i, n = params.nclusters;
_covs.resize(n);
for( i = 0; i < n; i++ )
- _covs[i] = Mat(covs[i]);
+ Mat(covs[i]).copyTo(_covs[i]);
}
Mat CvEM::getWeights() const
type = CV_16SC1;
else if (pai->itemsize == 4)
type = CV_32SC1;
- else if (pai->itemsize == 8) {
- PyErr_SetString(PyExc_TypeError, "OpenCV cannot handle 64-bit integer arrays");
- return NULL;
- }
break;
case 'u':
else if (pai->itemsize == 8)
type = CV_64FC1;
break;
-
+
+ }
+ if (type == -1) {
+ PyErr_SetString(PyExc_TypeError, "the array type is not supported by OpenCV");
+ return NULL;
}
- assert(type != -1);
if (!allowND) {
cvmat_t *m = PyObject_NEW(cvmat_t, &cvmat_Type);
Mat temp, *p = (Mat*)&m;
if(!p->refcount || p->allocator != &g_numpyAllocator)
{
- pyopencv_to(Py_None, temp);
+ temp.allocator = &g_numpyAllocator;
m.copyTo(temp);
p = &temp;
}
static bool to(PyObject* obj, vector<_Tp>& value, const char* name="<unknown>")
{
typedef typename DataType<_Tp>::channel_type _Cp;
- if(!obj)
+ if(!obj || obj == Py_None)
return true;
if (PyArray_Check(obj))
{
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))
return false;
PyObject *seq = PySequence_Fast(obj, name);
template<typename _Tp> static inline PyObject* pyopencv_from_generic_vec(const vector<_Tp>& value)
{
int i, n = (int)value.size();
- PyObject* seq = PyTuple_New(n);
+ PyObject* seq = PyList_New(n);
for( i = 0; i < n; i++ )
{
PyObject* item = pyopencv_from(value[i]);
if(!item)
break;
- PyTuple_SET_ITEM(seq, i, item);
+ PyList_SET_ITEM(seq, i, item);
}
if( i < n )
{