1. 程式人生 > >python實現影象邊緣演算法

python實現影象邊緣演算法

關於作者:
程式設計師:楊洪(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.測試圖片