1. 程式人生 > 程式設計 >python使用opencv resize影象不進行插值的操作

python使用opencv resize影象不進行插值的操作

如下所示:

def resize(src,dsize,dst=None,fx=None,fy=None,interpolation=None):

如果使用vanilla resize,不改變預設引數,就會對原影象進行插值操作。不關你是擴大還是縮小圖片,都會通過插值產生新的畫素值。

對於語義分割,target的處理,如果是對他進行resize操作的話。就希望不產生新的畫素值,因為他的顏色資訊,代表了畫素的類別資訊。

但是我們有時候希望resize之後不產生新的畫素值,而是產生利用最近鄰點的畫素值作為新產生的畫素值。要實現這個操作只需要將interpolation=cv2.INTER_NEAREST

,這個引數的預設值是雙線性插值,幾乎必然會產生新的畫素值。

補充知識:python+OpenCV最近鄰域插值法 雙線性插值法原理

1.最近鄰域插值法

假設原影象大小為1022,縮放到510,可以用原影象上的點來表示目標影象上的每一個點。

例如目標影象上的點(1,2)可以用原影象的點(2,4)來表示。

dst x 1 -> dst x 2 newX
newX = x*(src 行/目標 行) newX = 1*(10/5) = 2
newY = y*(src列/目標 列) newY = 2*(20/10) = 4

12.3取12,當為小數時則取離整數最近的數

2.雙線性插值法

python使用opencv resize影象不進行插值的操作

A1(15.2,22)

A2(15.2,23)
B1(15,22.3)
B2(16,22.3)

A1 = 20%上面的點 + 80%下面的點A2

B1 = 30%左邊的點 + 70%右面的點B2

中間的點 = A130% + A270%

中間的點 = B120% + B280%

以上這篇python使用opencv resize影象不進行插值的操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。