我有以下代碼來裁剪影像的一部分:
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表示什么?謝謝
uj5u.com熱心網友回復:
他們設計的邏輯與你想象的不同。看起來像:
cropImg = img[rowStart:rowEnd, colsStart:colsEnd]
這意味著前 2 對需要定義行開始和結束坐標,即Y 軸坐標,然后是列開始和結束坐標,即X 軸坐標。因此,需要在您的代碼中將這一行更改為:
cropImg = img[170:511,470:645]
您的結果將更改為:

uj5u.com熱心網友回復:
(x1, y1) 是起點坐標,而 (x2, y2) 是影像中的終點。在矩形中,您可以將它們視為左上角是 (x1, y1) 而 (x2, y2) 是右下角 - 或者就像寬度和高度一樣。
但是在裁剪時它們有一點反向格式
cropImage = image[ y1: y2 , x1: x2]
# or
cropImage = image[ Y: H, X: W ]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/447027.html
上一篇:找不到opencv函式的來源
