文章目录

  • ​​1、问题描述​​
  • ​​2、结果展示​​
  • ​​2.1 opencv结果​​
  • ​​2.2 PIL结果​​
  • ​​3、具体代码​​
  • ​​3.1 opencv​​
  • ​​3.2 PIL​​

1、问题描述

有时在进行图像处理的时候,需要先对图像进行裁剪,如何进行裁剪,很简单。数字图像本质上还是矩阵,只用想着对矩阵做处理就行了。但是有一点必要理解,图像的长度是矩阵的列数,图像的宽度是矩阵的行数。所以说:
​​​对于opencv下的图片,length=image.shape[1], width=image.shape[0]​​​​对于PIL下的图片,length=image.size[0], width=image.size[1]​

2、结果展示

原图

图像处理-图像裁剪_Image


结果:

2.1 opencv结果

图像处理-图像裁剪_Image_02

2.2 PIL结果

图像处理-图像裁剪_浮点数_03

3、具体代码

3.1 opencv

import cv2 as cv

def ImShow(name,img):
cv.imshow(name,img)
cv.waitKey()
return;
if __name__ == '__main__':
src = "/home/barry/PycharmProject/LL/Image/img.png"
Img = cv.imread(src)

img = Img.copy();
img = cv.resize(img,(1200,600))

print(img.shape)
print(img.shape[0]," ", img.shape[1])

length = img.shape[1] # 长度对应矩阵列数
width = img.shape[0] #宽度对应矩阵行数

w = int(width/2) #这里不加int会报错,因为width/2的结果是一个浮点数
img = img[0:length,0:w]

cv.imwrite('/home/barry/PycharmProject/LL/Image/img_result.jpg',img)
ImShow("img",img)

3.2 PIL

from PIL import Image
src = "/home/barry/PycharmProject/LL/Image/img.png"

img = Image.open(src).convert('RGB')

a = img.size[0]
b = img.size[1]

a1 = int(a)
b1 = int(b/4)


cropped = img.crop((0,0,a1,b1)) #左上角坐标,右下角坐标
print(img.size)
print(cropped.size)
Image._show(cropped)