使用Python OpenCV裁剪图像的一部分的简单方法是什么?

3 人关注

我有以下代码来裁剪图片的一部分。

import cv2
def on_mouse(event, x, y, flags, param):
    if event == cv2.EVENT_LBUTTONDOWN:
        print("X: {} | Y: {}".format(x, y))
win_name = "Image"
cv2.namedWindow(win_name)
cv2.setMouseCallback(win_name, on_mouse)
img = cv2.imread('park.jpg')
cropImg = img[179:470, 511:645]
cv2.imshow(win_name, img)
cv2.imshow("Crop", cropImg)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上面的代码中,你可以看到我已经定义了一个函数调用on_mouse,它基本上给我们提供了鼠标在图像上点击的坐标(x,y)。这有助于获得我们要裁剪的区域的x1, y1x2, y2的坐标。在下面的图片中,我试图裁剪giraffe的区域。所以我点击长颈鹿附近的左上角,得到的坐标是X: 470 | Y: 179,然后我点击长颈鹿的右下角,得到的坐标是X: 645 | Y: 511。当在上述代码中使用它们时,它的输出如下

以下是原始图像

有谁能帮助我理解如何才能裁剪它,这些x1, y1 and x2, y2表示什么?谢谢

python
opencv
S Andrew
S Andrew
发布于 2022-03-18
2 个回答
Yunus Temurlenk
Yunus Temurlenk
发布于 2022-03-18
已采纳
0 人赞同

他们设计的逻辑与你想象的不同。它看起来像。

cropImg = img[rowStart:rowEnd, colsStart:colsEnd]

这意味着首先你需要定义2对夫妇行开始end坐标,这意味着Y轴 coordinates和then 列开始end坐标,这意味着X轴协调员。因此,在你的代码中需要将这一行改成。

cropImg = img[170:511,470:645]

你的结果将发生变化,如:

Ashwin Raikar
Ashwin Raikar
发布于 2022-03-18
0 人赞同

(x1, y1)是起点的坐标,而(x2, y2)是图像的终点。在一个矩形中,你可以认为左上角是(x1,y1),而(x2,y2)是右下角--或者就像宽度和高度。