3 回答

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊
我有這個(gè)問(wèn)題,在這里找到另一個(gè)答案:復(fù)制感興趣的區(qū)域
如果我們將(0,0)視為圖像的左上角,im
從左到右稱為x方向,從上到下稱為y方向。我們將(x1,y1)作為左上頂點(diǎn),將(x2,y2)作為該圖像中矩形區(qū)域的右下頂點(diǎn),然后:
roi = im[y1:y2, x1:x2]
這里有一個(gè)關(guān)于numpy數(shù)組索引和切片的綜合資源,它可以告訴你更多關(guān)于裁剪圖像的一部分的事情。圖像將作為numpy數(shù)組存儲(chǔ)在opencv2中。
:)

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超5個(gè)贊
需要注意的是,圖像切片也沒(méi)有創(chuàng)造的一個(gè)副本cropped image
,但創(chuàng)建pointer
的roi
。如果要加載這么多圖像,使用切片裁剪圖像的相關(guān)部分,然后附加到列表中,這可能會(huì)造成巨大的內(nèi)存浪費(fèi)。
假設(shè)您每個(gè)都加載N個(gè)圖像,>1MP
并且您只需要100x100
左上角的區(qū)域。
Slicing
:
X = []for i in range(N): im = imread('image_i') X.append(im[0:100,0:100]) # This will keep all N images in the memory. # Because they are still used.
或者,您可以復(fù)制相關(guān)部分.copy()
,因此垃圾收集器將刪除im
。
X = []for i in range(N): im = imread('image_i') X.append(im[0:100,0:100].copy()) # This will keep all only the crops in the memory. # im's will be deleted by gc.
找出在此之后,我意識(shí)到一個(gè)評(píng)論由user1270710提到,但我花了相當(dāng)長(zhǎng)的一段時(shí)間去找出(即,調(diào)試等)。所以,我認(rèn)為值得一提。
添加回答
舉報(bào)