crop image in skimage?

前端 未结 4 1754
小蘑菇
小蘑菇 2021-02-09 04:30

I\'m using skimage to crop a rectangle in a given image, now I have (x1,y1,x2,y2) as the rectangle coordinates, then I had loaded the image

 image = skimage.io.         


        
相关标签:
4条回答
  • 2021-02-09 04:41

    One could use skimage.util.crop() function too, as shown in the following code:

    import numpy as np
    from skimage.io import imread
    from skimage.util import crop
    import matplotlib.pylab as plt
    
    A = imread('lena.jpg')
    
    # crop_width{sequence, int}: Number of values to remove from the edges of each axis. 
    # ((before_1, after_1), … (before_N, after_N)) specifies unique crop widths at the 
    # start and end of each axis. ((before, after),) specifies a fixed start and end 
    # crop for every axis. (n,) or n for integer n is a shortcut for before = after = n 
    # for all axes.
    B = crop(A, ((50, 100), (50, 50), (0,0)), copy=False)
    
    print(A.shape, B.shape)
    # (220, 220, 3) (70, 120, 3)
    
    plt.figure(figsize=(20,10))
    plt.subplot(121), plt.imshow(A), plt.axis('off') 
    plt.subplot(122), plt.imshow(B), plt.axis('off') 
    plt.show()
    

    with the following output (with original and cropped image):

    0 讨论(0)
  • 2021-02-09 04:53

    you can go ahead with the Image module of the PIL library

    from PIL import Image
    im = Image.open("image.png")
    im = im.crop((0, 50, 777, 686))
    im.show()
    
    0 讨论(0)
  • 2021-02-09 04:57

    You can crop image using skimage just by slicing the image array like below:

    image = image_name[y1:y2, x1:x2]
    

    Example Code :

    from skimage import io
    import matplotlib.pyplot as plt
    
    image = io.imread(image_path)
    cropped_image = image[y1:y2, x1:x2]
    plt.imshow(cropped_image)
    
    0 讨论(0)
  • 2021-02-09 04:58

    This seems a simple syntax error.

    Well, in Matlab you can use _'parentheses'_ to extract a pixel or an image region. But in Python, and numpy.ndarray you should use the brackets to slice a region of your image, besides in this code you is using the wrong way to cut a rectangle.

    The right way to cut is using the : operator.

    Thus,

    from skimage import io
    image = io.imread(filename)
    cropped = image[x1:x2,y1:y2]
    
    0 讨论(0)
提交回复
热议问题