使用 Python OpenCV 裁剪部分图像的简单方法是什么
What is the easy way to crop a part of image using Python OpenCV
我有以下代码来裁剪图像的一部分:
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, y1
和 x2, y2
坐标。在下图中,我试图裁剪 giraffe
的区域。所以我点击了长颈鹿附近的左上角,坐标为 X: 470 | Y: 179
,然后我点击了长颈鹿的右下角,坐标为 X: 645 | Y: 511
。在上面的代码中使用它们时,它给出以下输出
下图为原图
任何人都可以帮助我了解如何裁剪它以及这些 x1, y1 and x2, y2
表示什么?谢谢
他们设计的逻辑和你想象的不一样。看起来像:
cropImg = img[rowStart:rowEnd, colsStart:colsEnd]
这意味着前两对你需要定义行开始和结束坐标,这意味着Y轴 坐标,然后是 列开始 和 结束 坐标,这意味着 X 轴 坐标。因此,您的代码中需要将该行更改为:
cropImg = img[170:511,470:645]
你的结果会变成:
(x1,y1)为起点坐标,(x2,y2)为终点坐标。在矩形中,您可以将它们视为 top-left 角是 (x1, y1) 而 (x2, y2) 是 bottom-right 角 - 或者就像宽度和高度一样。
但是在裁剪时它们有一点反向格式
cropImage = image[ y1: y2 , x1: x2]
# or
cropImage = image[ Y: H, X: W ]
我有以下代码来裁剪图像的一部分:
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, y1
和 x2, y2
坐标。在下图中,我试图裁剪 giraffe
的区域。所以我点击了长颈鹿附近的左上角,坐标为 X: 470 | Y: 179
,然后我点击了长颈鹿的右下角,坐标为 X: 645 | Y: 511
。在上面的代码中使用它们时,它给出以下输出
下图为原图
任何人都可以帮助我了解如何裁剪它以及这些 x1, y1 and x2, y2
表示什么?谢谢
他们设计的逻辑和你想象的不一样。看起来像:
cropImg = img[rowStart:rowEnd, colsStart:colsEnd]
这意味着前两对你需要定义行开始和结束坐标,这意味着Y轴 坐标,然后是 列开始 和 结束 坐标,这意味着 X 轴 坐标。因此,您的代码中需要将该行更改为:
cropImg = img[170:511,470:645]
你的结果会变成:
(x1,y1)为起点坐标,(x2,y2)为终点坐标。在矩形中,您可以将它们视为 top-left 角是 (x1, y1) 而 (x2, y2) 是 bottom-right 角 - 或者就像宽度和高度一样。
但是在裁剪时它们有一点反向格式
cropImage = image[ y1: y2 , x1: x2]
# or
cropImage = image[ Y: H, X: W ]