mirror of
https://github.com/opencv/opencv.git
synced 2026-09-11 04:43:22 -05:00
Merge pull request #29709 from Nikhi00718:agent/fix-high-channel-ndarray-4x
Fix silent loss of high-channel NumPy dimensions (4.x)
This commit is contained in:
@@ -173,7 +173,7 @@ bool pyopencv_to(PyObject* o, Mat& m, const ArgInfo& info)
|
||||
|
||||
CV_LOG_DEBUG(NULL, "Incoming ndarray '" << info.name << "': ndims=" << ndims << " _sizes=" << pycv_dumpArray(_sizes, ndims) << " _strides=" << pycv_dumpArray(_strides, ndims));
|
||||
|
||||
bool ismultichannel = ndims == 3 && _sizes[2] <= CV_CN_MAX && !info.nd_mat;
|
||||
bool ismultichannel = ndims == 3 && !info.nd_mat;
|
||||
if (pyopencv_Mat_TypePtr && PyObject_TypeCheck(o, pyopencv_Mat_TypePtr))
|
||||
{
|
||||
bool wrapChannels = false;
|
||||
|
||||
@@ -89,6 +89,19 @@ try:
|
||||
print(res1)
|
||||
|
||||
|
||||
def test_ndarray_channel_limit_is_reported(self):
|
||||
map_x, map_y = np.meshgrid(
|
||||
np.arange(8, dtype=np.float32),
|
||||
np.arange(8, dtype=np.float32),
|
||||
)
|
||||
data = np.broadcast_to(
|
||||
np.arange(513, dtype=np.uint8),
|
||||
(8, 8, 513),
|
||||
).copy()
|
||||
|
||||
with self.assertRaisesRegex(cv.error, "unable to wrap channels"):
|
||||
cv.remap(data, map_x, map_y, cv.INTER_NEAREST)
|
||||
|
||||
def test_mat_wrap_channels_zero(self):
|
||||
# Passing a 0-channel array must raise cv.error, not segfault.
|
||||
data = np.zeros((100, 100, 0), dtype=np.uint8)
|
||||
|
||||
Reference in New Issue
Block a user