基本的Python OpenCV裁剪和调整大小

时间:2017-08-17 04:34:45

标签: python opencv math

有人可以用一点裁剪算法帮我吗?它的openCV ..我试图弄清楚这一点。我知道方法是crop = image [y:y1,x:x1]。 如果我有一个带有new_dimensionXxnew_dimensionY像素的图像,我想将它裁剪为相同的宽度,但高度刚好比pointOfInterestX高出121px。我怎么能这样做?

还有一个问题:

image = cv2.resize(image,(int(new_dimensionX), int(new_dimensionY)))
cv2.imwrite("test6.jpg", image)

文件test6.jpg并不反映在其上方的行中完成的调整大小。为什么呢?

1 个答案:

答案 0 :(得分:3)

当您使用 imshow()显示已调整大小的图像时,它会在屏幕上显示图像并根据图像像素更改显示窗口大小。当您使用图像查看器打开图像时,它会以固定的窗口大小打开图像,窗口大小不依赖于图像像素

OpenCV提供了一个名为resize的函数来实现图像缩放。两种缩放图像的方法

  1. 提供所需尺寸

  2. 通过提供比例因子

  3. 如果您没有指定尺寸(使用无),那么它需要X和Y比例因子

    同时提供缩放尺寸

    import cv2
    filename = "path_to_image"
    
    oriimage = cv2.imread(filename)
    
    print oriimage.shape
    newx,newy = oriimage.shape[1]/4,oriimage.shape[0]/4 #new size (w,h)
    
    newimage = cv2.resize(oriimage,(newx,newy))
    
    print newimage.shape
    
    cv2.imshow("original image",oriimage)
    cv2.imshow("resize image",newimage)
    
    cv2.waitKey(0)
    

    缩放比例

    import cv2
    filename = "path_to_image"
    
    image = cv2.imread(filename) 
    
    small = cv2.resize(image, (0,0), fx=0.5, fy=0.5) 
    
    large = cv2.resize(image, (0,0), fx=1.5, fy=1.5)
    
    cv2.imshow("small image",small)
    cv2.imshow("large image",large)
    
    #To save rescale image
    cv2.imwrite('s.jpg',small)
    cv2.imwrite('l.jpg',large)
    
    cv2.waitKey(0)
    

    有关 resize() 方法的详细参数

    裁剪图片 opencv

    import cv2
    im_path = "path/to/image"
    img = cv2.imread(im_path)
    
    crop_img = img[0:400, 0:300] # Crop from {x, y, w, h } => {0, 0, 300, 400}
    
    cv2.imshow("cropped", crop_img)
    cv2.waitKey(0)
    

    Opencv imread方法读取图像并返回numpy数组,numpy数组的大小等于图像数组。如果你想裁剪图像只需选择一个数组

    img[0:400,0:300]
    

    注意:它的img [y:y + h,x:x + w] img取第一个y,第二个高度是x和宽度