首页 > 编程语言 >Python提取彩色图像的二值化边缘

Python提取彩色图像的二值化边缘

时间:2023-06-09 21:03:32浏览次数:39  
标签:彩色图像 Python 像素 边缘 c3 c2 c1 二值化 ratio


所谓二值化是指只包含白和黑这两种颜色,下面的代码中使用白色表示内部或背景,使用黑色表示边缘。

图像边缘提取的基本思路是:如果一个像素的颜色值与周围像素足够接近(属于低频部分)则认为是图像背景或者内部,如果一个像素的颜色值与周围像素相差很大(属于高频部分)则认为是图像边缘。在具体实现时,边缘提取有很多种方法,分别采用不同的卷积和,针对不同类型的边缘。下面代码的思路是:如果一个像素的颜色值与其右侧和下侧像素都足够接近则认为不是边缘,否则认为是边缘。

from PIL import Image
def isSimilar(c1, c2, c3, ratio):
    #c1,c2,c3都是(r,g,b)形式的元组
    #判断c1是否同时与c2、c3都足够相似
    #ratio为判断是否足够接近的阈值
    t1 = [abs(2*cc1-cc2-cc3) for cc1, cc2,cc3 in zip(c1,c2,c3)]
    tt = [c*ratio for c in c1]
    #足够接近返回True,否则返回False
    if t1<=tt:
        return True
    return Falsedef edgeExtract(imgFn):
    #打开原始图像,获取尺寸
    im = Image.open(imgFn)
    width, height = im.size
    #创建空白图像
    imDst = Image.new('RGB', im.size, (0,0,0))
    for w in range(width-1):
        for h in range(height-1):
            #分别获取原始图像当前位置、下侧、右侧像素的颜色
            c1 = im.getpixel((w,h))[:3]
            c2 = im.getpixel((w,h+1))[:3]
            c3 = im.getpixel((w+1,h))[:3]
            #如果足够接近,在空白图像中绘制白色,否则绘制黑色
            if isSimilar(c1, c2, c3, 0.2):
                imDst.putpixel((w,h), (255,255,255))
            else:
                imDst.putpixel((w,h), (0,0,0))
    #保存结果图像
    imDst.save(imgFn[:-4] + '_new' + imgFn[-4:])edgeExtract('test.png')

测试图像:

Python提取彩色图像的二值化边缘_计算机视觉

使用上面的代码提取出来的边缘:

Python提取彩色图像的二值化边缘_深度学习_02

标签:彩色图像,Python,像素,边缘,c3,c2,c1,二值化,ratio
From: https://blog.51cto.com/u_9653244/6451085

相关文章

  • Python+SQLite开发无界面版通信录管理系统
    本文重点在于演示Python对SQLite数据库的操作,以及命令行式菜单的工作原理和实现。首先使用SQLiteDatabaseBrowser创建SQLite数据库data.db,然后创建一个数据表addressList,最后在数据表addressList中创建字段id(INTEGERPRIMARYKEY类型)、name(TEXT类型)、sex(TEXT类型)、age(NUMERIC类型......
  • 妙用Python集合求解啤酒问题(携程2016笔试题)
    问题描述:一位酒商共有5桶葡萄酒和1桶啤酒,6个桶的容量分别为30升、32升、36升、38升、40升和62升,并且只卖整桶酒,不零卖。第一位顾客买走了2整桶葡萄酒,第二位顾客买走的葡萄酒是第一位顾客的2倍。那么,本来有多少升啤酒呢?解析:由于该酒商只卖整桶酒,简单分析几个桶的容量可知,第二位顾客......
  • Python两种方法求解登楼梯问题(京东2016笔试题)
    问题:假设一段楼梯共15个台阶,小明一步最多能上3个台阶,那么小明上这段楼梯一共有多少种方法?解析:从第15个台阶上往回看,有3种方法可以上来(从第14个台阶上一步迈1个台阶上来,从第13个台阶上一步迈2个台阶上来,从第12个台阶上一步迈3个台阶上来),同理,第14个、13个、12个台阶都可以这样推算,从......
  • 大数据分析python
    #导库importnumpyasnpimportpandasaspd#读取数据data=pd.read_csv('logistics.csv')data.head(10)思路:直接查看不同公司的数量即可df1=data.groupby('货运公司名称').size().reset_index(name='count')#直接对货运公司的名称做统计(示例:天天速递25)df12.接通知对......
  • 使用Python编写简易定时器
    简单模拟了定时器功能,需要的朋友可以自己改写和扩充功能。importdatetimeimportwinsoundimporttimeimportrandomdefTimer(y,m,d,h,mu,s):'''参数分别为年、月、日、时、分、秒'''stopTime=datetime.datetime(y,m,d,h,mu,s)maxTime=stopTime+......
  • 使用Python寻找黑洞数
     黑洞数是指这样的整数:由这个数字每位上的数字组成的最大数减去每位数字组成的最小数仍然得到这个数自身。例如3位黑洞数是495,因为954-459=495,4位数字是6174,因为7641-1467=6174。本文重点在于内置函数sorted()和reversed()的用法。defmain(n):'''参数n表示数字的位数,例如n=3......
  • Python中的具名元组类用法
    >>>fromcollectionsimportnamedtuple>>>Point=namedtuple('Point',['x','y','z'])#创建具名元组类>>>Point<class'__main__.Point'>>>>p=Point(3,4,5)#实例化对象......
  • Python“制作”midi音乐“两只老虎”
    从网上找了很多谱子,可惜没有音乐细胞看不太懂,根据自己的理解改了好几遍,还是听不出来“两只老虎”的感觉,于是在标题上加了双引号。这样的话就只能了解本文思路了,算是抛砖引玉吧,重点是Python标准库winsound的Beep()函数可以发出37到32767赫兹之间频率的声音,其第二个参数为发声时长。f......
  • Python标准库zlib提供的数据压缩功能
    Python标准库zlib中提供的compress()和decompress()函数可以用于数据的压缩和解压缩,在压缩数据之前需要先想办法编码为字节串。>>>importzlib>>>x='Python程序设计系列图书,董付国编著,清华大学出版社'.encode()>>>len(x)72>>>y=zlib.compress(x)>>>len(y)#对于重......
  • Python使用Queue对象实现多线程同步小案例
    queue模块的Queue对象实现了多生产者/多消费者队列,尤其适合需要在多个线程之间进行信息交换的场合,实现了多线程编程所需要的所有锁语义。Queue对象主要实现了put()和get()方法,分别用来往队列尾部追加元素和在队列头部获取并删除元素。这两个方法都允许指定超时时间,其用法分别为put(......