openCV彩色图像的copyMakeBorder应该采用什么形状



我有一个3通道彩色图像,我想使用openCVcopyMakeBorder提取一个具有反射边界的子图像。图像的形状应该是(3,H,W(还是(H,W,3(还是什么?

我相信openCV使用Numpy数组。假设我有一个512x512x3颜色的图像,它将是一个形状为[512512,3]的数组。当我在整个图像上调用CCD_ 2时;"反射";,我想取回一个由[557676,3]数组表示的图像,而不是[512512,67]数组。因此,轴的顺序很重要。很抱歉,我没有任何代码可以指向,我在编码之前试图理解。

好吧,试试吧…

>>> im=np.random.randint( (32,32,3) )
>>> im.shape
(3,)
>>> im=np.random.randint(0,255,(32,32,3))
>>> im.shape
(32, 32, 3)
>>> cv2.copyMakeBorder
<built-in function copyMakeBorder>
>>> imb = cv2.copyMakeBorder( im, 8, 8, 8, 8, 3 )
>>> imb.shape
(48, 48, 3)
>>> im2=np.random.randint(0,255,(3,32,32))
>>> im2.shape
(3, 32, 32)
>>> cv2.copyMakeBorder(im2,8,8,8,8,3).shape
(19, 48, 32)

因此,正如我所怀疑的,轴的顺序确实很重要,正确的顺序是[row,col,color]。在上面的例子中im2[color,row,col],行为不端。

最新更新