Merge pull request #24026 from VadimLevin:dev/vlevin/python-numpy-writeable-flag-check

fix: preserve NumPY writeable flag in output arguments
pull/24031/head
Alexander Smorkalov 1 year ago committed by GitHub
commit c792233d9c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 7
      modules/python/src2/cv2_convert.cpp
  2. 6
      modules/python/test/test_misc.py

@ -101,6 +101,13 @@ bool pyopencv_to(PyObject* o, Mat& m, const ArgInfo& info)
PyArrayObject* oarr = (PyArrayObject*) o;
if (info.outputarg && !PyArray_ISWRITEABLE(oarr))
{
failmsg("%s marked as output argument, but provided NumPy array "
"marked as readonly", info.name);
return false;
}
bool needcopy = false, needcast = false;
int typenum = PyArray_TYPE(oarr), new_typenum = typenum;
int type = typenum == NPY_UBYTE ? CV_8U :

@ -232,6 +232,12 @@ class Arguments(NewOpenCVTests):
Exception, msg, cv.utils.dumpInputArray, test_array
)
def test_numpy_writeable_flag_is_preserved(self):
array = np.zeros((10, 10, 1), dtype=np.uint8)
array.setflags(write=False)
with self.assertRaises(Exception):
cv.rectangle(array, (0, 0), (5, 5), (255), 2)
def test_20968(self):
pixel = np.uint8([[[40, 50, 200]]])
_ = cv.cvtColor(pixel, cv.COLOR_RGB2BGR) # should not raise exception

Loading…
Cancel
Save