小能豆

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

javascript

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

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。如果是这种情况,请解释如何正确使用此功能。


阅读 26

收藏
2024-07-08

共1个答案

小能豆

要使用 OpenCV 裁剪图像,您不需要使用getRectSubPix。相反,您可以使用数组切片直接裁剪图像。以下是操作方法:

Python复制代码import cv2 as cv

# Load the image in grayscale
im = cv.imread('0.png', cv.IMREAD_GRAYSCALE)

# Crop the image using array slicing
# im[y1:y2, x1:x2]
cropped_im = im[1:33, 1:98]

# Save the cropped image
cv.imwrite('_0.png', cropped_im)

# Display the cropped image
cv.imshow('Cropped Image', cropped_im)
cv.waitKey(0)
cv.destroyAllWindows()

解释:

  1. 加载图像

Python 复制代码 im = cv.imread('0.png', cv.IMREAD_GRAYSCALE)

这将以灰度模式加载图像。

  1. 裁剪图像

Python 复制代码 cropped_im = im[1:33, 1:98]

切片im[y1:y2, x1:x2]选择图像从 (x1, y1) 到 (x2, y2) 的区域。在您的示例中,这对应于 (1, 1) 到 (98, 33)。

  1. 保存裁剪的图像

Python 复制代码 cv.imwrite('_0.png', cropped_im)

这会将裁剪的图像保存到文件中。

  1. 显示裁剪后的图像

Python复制代码cv.imshow('Cropped Image', cropped_im) cv.waitKey(0) cv.destroyAllWindows()

这些命令在窗口中显示裁剪的图像,直到按下某个键,然后关闭窗口。

在 OpenCV 中使用数组切片来裁剪图像是一种简单而有效的方法。

2024-07-08