Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python OpenCV通过填充调整大小_Python_Opencv_Image Processing - Fatal编程技术网

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

我正在尝试为我正在开发的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
返回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: