OpenCV 實現最小值降取樣

2021-08-28 10:19:22 字數 1750 閱讀 1869

在處理某些高分辨的影象時,如果直接對其原圖進行操作處理,那麼效率是很低下的,因此我們要在盡可能的保留影象資訊的情況下,減小影象的解析度大小,此時就需要用到影象的降取樣。由於我本人之前都是在處理裂縫的影象,而裂縫一般都是屬於灰度值較低的部分,因此本文採用最小值的將取樣法,將裂縫資訊得以完整的保留,以便後續進行分析計算。具體操作如下:

實際上如果結合opencv實現我們上述的功能還是挺簡單的,下面我分別給出python和c++的**:

python**如下:

""" 最小值取樣法python實現 _author_zhoujh_"""

import numpy as np

import cv2

im = cv2.imread('c:\\users\\xa\\desktop\\test.jpg',0)#讀入一張灰度圖

a, b = im.shape[:2]

m = int(a / 5) # hight #降取樣後影象的長和寬,如果不能被整除理論上應該是加上邊框的

n = int(b / 5) # length 降取樣為原來的1/5

""" 降取樣函式,為了簡單粗暴先採用列表儲存降取樣後的值,然後reshape """

def downsampling(m,n):

img =

for x in range(m):

for y in range(n):

s = im[5 * x:5 * (x + 1), 5 * y:5 * (y + 1)].min() #選取視窗中灰度值最小的那個值,作為降取樣後的值

down_img = np.array((img), np.uint8).reshape(m, n) # 將取樣後的影象

return down_img

if __name__=='__main__':

p=downsampling(m,n)

cv2.imshow('1',p)

cv2.waitkey(0)

cv2.destroyallwindows()

下面這張為降取樣後的裂縫影象,可以看出,影象整體變暗,但是裂縫的細節被完整的儲存下來。

c++**如下:

/*最小值取樣c++實現 author_zhoujh */

#include#include#include using namespace std;

using namespace cv;

/* 對影象進行降取樣 */

void downsampling(const mat &mat)

} imshow("1", m);

waitkey(0);

}int main()

效果和上面是一樣的,如下所示:

基於最小值的降取樣方法實現起來還是比較簡單的,但是卻很有用的,一般可作為影象的預處理部分。程式是之前專案的乙個小部分,故特此總結和大家分享!

滑動最小值

時間限制 1 sec 記憶體限制 128 mb 提交 127 解決 27 提交 狀態 討論版 命題人 admin 題目描述 給定乙個長度為 n 的數列 a0,a1,an 1和乙個整數k。求數列 bi min ai,ai 1 ai k 1 i 0,n 特別的,對於 i n k 的 bi 0。輸入第一行...

最大最小值

示例一 maximum lambda x,y x y x x y y 注意 x y 返回的是0或者1 minimum lambda x,y x y y x y x a 10 b 20 print the largar one is d maximum a,b print the lower one ...

最大值 最小值

求最大最小的時候有點小技巧,就是我們兩個兩個的比較,把大個跟當前最大比較,小的跟當前最小的比較,這樣就會節約一點比較時間,有原來的2 n到3 n 2。include include 得到最大最小值 int getmaxmin int ndata,int nlen,int pnmax,int pnmi...