我有下面的代码来裁剪图像的一部分:
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()
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,您可以看到我定义了一个函数调用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]
Run Code Online (Sandbox Code Playgroud)
这意味着您需要定义前两对行开始和结束坐标(即Y 轴坐标),然后定义列开始和结束坐标(即X 轴坐标)。因此,需要将代码中的行更改为:
cropImg = img[170:511,470:645]
Run Code Online (Sandbox Code Playgroud)
你的结果会像这样改变:
| 归档时间: |
|
| 查看次数: |
4304 次 |
| 最近记录: |