diff --git a/modules/core/src/matrix.cpp b/modules/core/src/matrix.cpp index 4642d3b623..1729862cb7 100644 --- a/modules/core/src/matrix.cpp +++ b/modules/core/src/matrix.cpp @@ -463,7 +463,7 @@ Mat::Mat(Size _sz, int _type, void* _data, size_t _step) } else { - CV_Assert(_step >= minstep); + CV_CheckGE(_step, minstep, ""); if (_step % esz1 != 0) { diff --git a/modules/python/src2/cv2.cpp b/modules/python/src2/cv2.cpp index 6231fde67f..58b1357eff 100644 --- a/modules/python/src2/cv2.cpp +++ b/modules/python/src2/cv2.cpp @@ -788,6 +788,8 @@ static bool pyopencv_to(PyObject* o, Mat& m, const ArgInfo& info) if (ndims >= 1 && _strides[ndims - 1] != (npy_intp)elemsize*_sizes[ndims]) needcopy = true; + + elemsize = CV_ELEM_SIZE(type); } if (needcopy) diff --git a/modules/python/test/test_misc.py b/modules/python/test/test_misc.py index 76803992dc..fe484089f6 100644 --- a/modules/python/test/test_misc.py +++ b/modules/python/test/test_misc.py @@ -187,6 +187,10 @@ class Arguments(NewOpenCVTests): #res6 = cv.utils.dumpInputArray([a, b]) #self.assertEqual(res6, "InputArrayOfArrays: empty()=false kind=0x00050000 flags=0x01050000 total(-1)=2 dims(-1)=1 size(-1)=2x1 type(0)=CV_32FC1 dims(0)=4 size(0)=[2 3 4 5]") + def test_20968(self): + pixel = np.uint8([[[40, 50, 200]]]) + _ = cv.cvtColor(pixel, cv.COLOR_RGB2BGR) # should not raise exception + def test_parse_to_bool_convertible(self): try_to_convert = partial(self._try_to_convert, cv.utils.dumpBool) for convertible_true in (True, 1, 64, np.bool(1), np.int8(123), np.int16(11), np.int32(2),