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