Python OpenCV通过填充调整大小
我正在尝试为我正在开发的Python/OpenCV应用程序执行一些图像预处理。我有一个非常简单的函数,可以从文件中加载图像,并将其大小调整为特定大小:Python OpenCV通过填充调整大小,python,opencv,image-processing,Python,Opencv,Image Processing,我正在尝试为我正在开发的Python/OpenCV应用程序执行一些图像预处理。我有一个非常简单的函数,可以从文件中加载图像,并将其大小调整为特定大小: def get_im(路径): img=cv2.imread(路径,cv2.imread\u颜色) img=cv2.cvt颜色(img,cv2.COLOR\u BGR2RGB) img=cv2.调整大小(img,(img_行,img_列)) img=np.数组(img) img=img.astype('float32') img/=255 返回i
def get_im(路径):
img=cv2.imread(路径,cv2.imread\u颜色)
img=cv2.cvt颜色(img,cv2.COLOR\u BGR2RGB)
img=cv2.调整大小(img,(img_行,img_列))
img=np.数组(img)
img=img.astype('float32')
img/=255
返回img
虽然这会调整图像的大小,但这样做会改变图像的纵横比。如何(最好使用OpenCV)在不改变纵横比的情况下缩放图像以适应特定的大小(IMG_行、IMG_列)?我能够根据以前的C++解决方案找到解决方案:
#调整大小
边界v=0
边界h=0
如果(IMG列/IMG行)>=(IMG.shape[0]/IMG.shape[1]):
边框v=int(((IMG列/IMG行)*IMG.shape[1])-IMG.shape[0])/2)
其他:
边框h=int(((IMG_行/IMG列)*IMG.shape[0])-IMG.shape[1])/2)
img=cv2.copyMakeBorder(img,border_v,border_v,border_h,border_h,cv2.border_常量,0)
img=cv2.调整大小(img,(img_行,img_列))
下面是正在发生的事情:
- 比较输入图像与目标图像的纵横比,以确定是否应使用if语句在垂直(v)轴或水平(h)轴上添加边框
- (以垂直为例),我使用公式
计算与目标图像具有相同纵横比但宽度等于输入图像的图像高度(IMG\u COL/IMG\u ROW)*IMG.shape[1]
- 然后减去图像的实际高度,以确定边界需要有多大
- 最后,除以二(当边框添加到上/下或左/右)并调用
,这将创建一个目标纵横比图像,其中黑色条“填充”纵横比之间的差异cv2.copyMakeBorder
填充调整大小是什么意思?@Pieget使用CSS类比;我正在寻找一个方面适合:似乎这是解决了C++,但不是Python: