cv :: Mat на самом деле являются массивами в Python. И в этом случае вы должны использовать функции NumPy, а не OpenCV.
Для copyTo в качестве клона используйте copy () как в:
a = np.zeros((10,10,3), dtype=np.uint8)
b = a.copy()
Для диапазонов, в numpy проще ... просто используйте:
a[y1:y2, x1:x2,:]
, что означает от строки y1 до строки y2 и от столбца x1 до столбца x2. Если вам нужно все, просто оставьте :
один, как и все строки:
a[:, x1:x2,:]
Последнее двоеточие для каналов, в данном случае для всех каналов, но вы также можете ограничить его. И если вам нужен только 1 столбец или канал, вы можете указать число напрямую, а не использовать «диапазон», такой как
a[4, x1:x2, 0]
Вы также можете удалить последний двоеточие каналов, и он будет использовать все из них. Как:
a[1:3, 4:8]
Наконец, чтобы скопировать значение в место на изображении, вы можете сделать что-то вроде:
bigImage[y1:y2, x1:x2] = image
Вы должны убедиться, что изображение вписывается в это место (включая каналы). Это означает, что если изображение имеет размер 640x480, вы не можете сделать это:
bigImage[10:20, 20:30] = image
но вы можете сделать что-то вроде
bigImage[10:20, 20:30] = image[10:20, 10:20]
при условии, что оба имеют одинаковое количество каналов