簡體   English   中英

使用 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()

在上面的代碼中,您可以看到我已經定義了一個 function 調用on_mouse ,它基本上為我們提供了鼠標在圖像上單擊的任何位置的坐標 (x, y)。 這有助於獲取我們要裁剪區域的x1, y1x2, y2坐標。 在下圖中,我試圖裁剪giraffe的區域。 所以我點擊了長頸鹿附近的左上角,坐標為X: 470 | Y: 179 X: 470 | Y: 179然后我點擊了長頸鹿的右下角,它給了我坐標X: 645 | Y: 511 X: 645 | Y: 511 在上面的代碼中使用它們時,它給出以下 output

在此處輸入圖像描述

下面是原圖

在此處輸入圖像描述

任何人都可以幫助我了解如何裁剪它以及這些x1, y1 and x2, y2表示什么? 謝謝

他們設計的邏輯與你想象的不同。 看起來像:

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

這意味着前 2 對你需要定義行開始結束坐標,這意味着Y 軸坐標,然后是列開始結束坐標,這意味着X 軸坐標。 因此,您的代碼中需要將該行更改為:

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

你的結果會像這樣改變:

在此處輸入圖像描述

(x1, y1) 是起點的坐標,而 (x2, y2) 是圖像中的終點。 在矩形中,您可以將它們視為左上角是 (x1, y1) 而 (x2, y2) 是右下角 - 或者就像寬度和高度一樣。

但是在裁剪時它們有一點反向格式

cropImage = image[ y1: y2 , x1: x2] 
# or
cropImage = image[ Y: H, X: W ] 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM