python實現影象邊緣演算法
阿新 • • 發佈:2018-12-29
關於作者:
程式設計師:楊洪(ellende)
blog: http://blog.csdn.NET/ellende
email: [email protected]
轉載請註明出處,引用部分網上部落格,若有侵權還請作者聯絡與我。
1.演算法原理
將當前的畫素值與相鄰的右部和下部的畫素值進行比較,若相似,則將畫素值設定為黑色,否則設定為白色。
2.判定畫素值相似方法
使用歐式距離演算法,將一個畫素的3個色彩分量對映在三維空間中,兩個畫素點的距離就是三維空間的直線距離值。
3.實現程式碼
#!/usr/bin/env python # -*- coding: utf-8 -*- # 影象邊緣演算法 import cv2 import numpy as np fn = "Z:\\ellende\\myworkspace\\learn_library\\my code\\python learn\\input_files\\test1.jpg" #歐式距離函式 def get_EuclideanDist(x, y): myx = np.array(x) myy = np.array(y) return np.sqrt(np.sum((myx-myy)*(myx-myy))) if __name__ == '__main__': print 'loading %s ...' % fn print 'working', myimg1 = cv2.imread(fn) w = myimg1.shape[1] h = myimg1.shape[0] sz1 = w sz0 = h #建立空白影象 myimg2 = np.zeros((sz0,sz1,3), np.uint8) #對比產生線條 black = np.array([0,0,0]) white = np.array([255,255,255]) centercolor = np.array([125,125,125]) for y in xrange(0, sz0 - 1): for x in xrange(0, sz1 - 1): mydown = myimg1[y+1, x, :] myright = myimg1[y, x+1, :] myhere = myimg1[y,x,:] lmyhere = myhere lmyright = myright lmydown = mydown if get_EuclideanDist(lmyhere, lmydown) > 16 and get_EuclideanDist(lmyhere, lmyright) > 16: myimg2[y,x,:] = black elif get_EuclideanDist(lmyhere,lmydown) <= 16 and get_EuclideanDist(lmyhere, lmyright) <= 16: myimg2[y,x,:] = white else: myimg2[y,x,:] = centercolor print '.', cv2.namedWindow('img2') cv2.imshow('img2', myimg2) cv2.waitKey() cv2.destoryAllWindows()
4.實現結果
5.測試圖片