如何使用Python在OpenCV中裁剪图像

我怎样才能裁剪图像,就像我之前在PIL中使用OpenCV所做的那样。

在PIL上工作的例子

im = Image.open('0.png').convert('L') im = im.crop((1, 1, 98, 33)) im.save('_0.png') 

但是我怎么能在OpenCV上做到这一点?

这是我试过的:

 im = cv.imread('0.png', cv.CV_LOAD_IMAGE_GRAYSCALE) (thresh, im_bw) = cv.threshold(im, 128, 255, cv.THRESH_OTSU) im = cv.getRectSubPix(im_bw, (98, 33), (1, 1)) cv.imshow('Img', im) cv.waitKey(0) 

但它不起作用。

我想我错误地使用了getRectSubPix 。 如果是这种情况,请解释我如何正确使用这个function。

这很简单。 使用numpy切片。

 import cv2 img = cv2.imread("lenna.png") crop_img = img[200:400, 100:300] # Crop from x, y, w, h -> 100, 200, 300, 400 # NOTE: its img[y: y + h, x: x + w] and *not* img[x: x + w, y: y + h] cv2.imshow("cropped", crop_img) cv2.waitKey(0) 

我有这个问题,并在这里find另一个答案: 复制感兴趣的区域

如果我们把(0,0)看作是图像的左上angular,称为im ,从左到右为x方向,从上到下为y方向。 (x1,y1)作为左上angular顶点,(x2,y2)作为该图像中矩形区域的右下angular顶点,则:

 roi = im[y1:y2, x1:x2] 

这里是一个关于numpy数组索引和切片的综合资源,它可以告诉你更多关于裁剪图像的一部分的信息。 图像将作为一个numpy数组存储在opencv2中。

🙂