首页 > 编程语言 >Python+pillow计算椭圆图形几何中心

Python+pillow计算椭圆图形几何中心

时间:2023-06-09 20:05:55浏览次数:43  
标签:椭圆 Python height width range im pillow color 255


本文所用测试图像文件位于当前文件夹的testimages子文件夹中,并且图像以白色为背景。

from PIL import Image
import os
def searchLeft(width, height, im):
    #从左向右扫描
    for w in range(width):
        #从下向上扫描
        for h in range(height):
            #获取图像指定位置的像素颜色
            color = im.getpixel((w, h))
            if color != (255, 255, 255):
                #遇到并返回椭圆边界最左端的x坐标
                return w
def searchRight(width, height, im):
    #从右向左扫描
    for w in range(width-1, -1, -1):
        for h in range(height):
            color = im.getpixel((w, h))
            if color != (255, 255, 255):
                #遇到并返回椭圆边界最右端的x坐标
                return w
            
def searchTop(width, height, im):
    for h in range(height-1, -1, -1):
        for w in range(width):
            color = im.getpixel((w,h))
            if color != (255, 255, 255):
                #遇到并返回椭圆边界最上端的y坐标
                return h
def searchBottom(width, height, im):
    for h in range(height):
        for w in range(width):
            color = im.getpixel((w,h))
            if color != (255, 255, 255):
                #遇到并返回椭圆边界最下端的y坐标
                return h
#遍历指定文件夹中所有bmp图像文件,假设图像为白色背景,椭圆为其他任意颜色
images = [f for f in os.listdir('testimages') if f.endswith('.png')]
for f in images:
    f = 'testimages\\'+f
    im = Image.open(f)
    
    #获取图像大小
    width, height = im.size
    x0 = searchLeft(width, height, im)
    x1 = searchRight(width, height, im)
    y0 = searchBottom(width, height, im)
    y1 = searchTop(width, height, im)
    center = ((x0+x1)//2, (y0+y1)//2)
    #把椭圆中心像素画成红色
    im.putpixel(center, (255,0,0))
    #保存为新图像文件
    im.save(f[0:-4]+'_center.png')
    im.close()

测试结果:

原始图像1

Python+pillow计算椭圆图形几何中心_python

运行结果:

Python+pillow计算椭圆图形几何中心_计算机视觉_02

原始图像2:

Python+pillow计算椭圆图形几何中心_python_03

运行结果:

Python+pillow计算椭圆图形几何中心_人脸识别_04

标签:椭圆,Python,height,width,range,im,pillow,color,255
From: https://blog.51cto.com/u_9653244/6450959

相关文章

  • Python使用RSA+MD5实现数字签名
    数字签名主要有防抵赖和防篡改两种功能:一是能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名,二是能确定消息的完整性。作为具体实现,发送报文时,发送方用一个哈希函数(例如MD5、SHA-1、SHA-256、SHA-384或SHA-512)从报文文本中生成报文摘要,然后用自己的私钥(由RSA......
  • Python+tensorflow计算整数阶乘的方法与局限性
    本文代码主要演示tensorflow的基本用法。importtensorflowas#创建变量,保存计算结果start=tf.Variable(1,dtype=tf.int64)#初始化变量的opinit_op=tf.global_variables_initializer()#启用默认图withtf.Session()assess:#初始化变量sess.run(ini......
  • Python使用scipy进行多项式计算与符号计算
    本文代码主要演示如何使用poly1d进行多项式计算和符号计算。fromscipyimport>>>p1=poly1d([1,2,3,4])#输出结果中,第一行的数字为第二行对应位置项中x的指数>>>print(p1)321x+2x+3x+4#等价于p2=(x-1)(x-2)(x-3)(x-4)>>>p2=poly1d([1,2,3......
  • Python中else关键字的常见用法
    Python中的else常见用法有三:选择结构、循环结构和异常处理结构。(1)选择结构这应该是最常见的用法,与关键字if和elif组合来使用,用来说明条件不符合时应执行的代码块。(2)循环结构Python中的for循环和while循环都可以带else子句,如果循环是因为条件不再成立而自然结束时会执行else中的代码......
  • Python实现字符串与指定密钥循环异或加解密
    异或运算在很多密码学算法中都有不同程度的应用,其运算特定在于一个数和另一个数连续异或两次仍得到原来的数。在实际使用中,因为要加密的信息和所使用的密钥在大多数情况下是不等长的,所以经常需要循环使用密钥。defcrypt1(source,key):'''source是要加密或解密的字符串,key是......
  • 详解Python生成器函数和生成器对象的原理和用法
    包含yield语句的函数可以用来创建生成器对象,这样的函数也称生成器函数。yield语句与return语句的作用相似,都是用来从函数中返回值。与return语句不同的是,return语句一旦执行会立刻结束函数的运行,而每次执行到yield语句并返回一个值之后会暂停后面代码的执行,下次通过生成器对象的__n......
  • Python 3.6+Django开发入门小案例(自动变化的问候)完整步骤
    第一步:在命令提示符环境使用pipinstalldjango命令安装django第二步:在命令提示符环境使用pythondjango-admin.pystartprojectdjango_greeting命令创建网站django_greeting第三步:利用资源管理器在网站目录django_greeting中创建子文件夹templates,并在该子文件夹中创建文件gree......
  • Python批量提取PDF文件中的文本
    首先需要执行命令pipinstallpdfminer3k来安装处理PDF文件的扩展库。importosimportsysimporttimepdfs=(pdfsforpdfsinos.listdir('.')ifpdfs.endswith('.pdf'))forpdf1inpdfs:pdf=pdf1.replace('','_').replace('-......
  • 基于Python+tkinter+pygame的音乐播放器完整源码
    importosimporttkinterimporttkinter.filedialogimportrandomimporttimeimportthreadingimportpygamefolder=''defplay():#folder用来表示存放MP3音乐文件的文件夹globalfoldermusics=[folder+'\\'+musicfo......
  • 最优的素数判断代码(Python)是这样写出来的
    素数判断是个很经典的问题,各种语言的程序设计课程都会涉及到,按照素数定义(除了1和自身,素数没有其他因数)很容易写出下面的代码:defisPrime1(n):foriinrange(2,n):ifn%i==0:returnFalsereturnTrue功能完全没有问题,就是非常非常非常非常慢。......