关于作者:
程序员:杨洪(ellende)
blog: http://blog.csdn.NET/ellende
email: yangh.personal@qq.com
转载请注明出处,引用部分网上博客,若有侵权还请作者联系与我。
1.算法原理
将当前的像素值与相邻的右部和下部的像素值进行比较,若相似,则将像素值设置为黑色,否则设置为白色。
2.判定像素值相似方法
使用欧式距离算法,将一个像素的3个色彩分量映射在三维空间中,两个像素点的距离就是三维空间的直线距离值。
3.实现代码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45#!/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.测试图片
最后
以上就是英勇路灯最近收集整理的关于python实现图像边缘算法的全部内容,更多相关python实现图像边缘算法内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复