通过不同的像素点为圆心,取不同的圆的半径大小,从而获取不同的圆的区域
方法步骤:
1、以特定的步长遍历图片的像素点为圆心
2、设置该圆心的上的特定半径的列表 如[r for in range(50,300,10)],从而获取半径列表
3、循环1、2、步骤,获取在图片的所有圆的图片
应用:获取图片可以进一步处理如 图像识别等
改进:可以使用正方形或其他曲线图形获取特定区域图片
上代码
import numpy as npfrom PIL import Imageimport math#预定义 variableheadacc=[]imglist=[]movearealist=[]#加载原始图片 转换为narray 类型img_arr=np.array(Image.open("people.png").convert("RGB"))#获取image的 shape,np取得的行和列 对应图片的height 和 widthcolumns,rows,tunnel=img_arr.shape#定义最大半径maxr=100#一般用户处理边界问题 同时指定最小半径halfr=int(maxr/2)#圆心的位置,可以根据实际情况调整起止区间 和步长for row in range(maxr,rows-maxr,10): for col in range(maxr,columns-maxr,10): #半径的长度,可以根据实际情况调整起止区间 和步长 for r in range(halfr,maxr,10): #开始画圆 取圆区域内的像素点 #初始化相同尺寸的Image图片 newheadimg=np.array([255]*256*256*3,dtype=np.uint8).reshape(256,256,3) #动态半径 x_start,x_end=row-r,row+r y_start,y_end=col-r,col+r #print("w,h,r,dr",row,col,r,dr) print("w,h,r,dr",row,col,r) for newhead_x in range(x_start,x_end+1): for newhead_y in range(y_start,y_end+1): #try: if float(math.sqrt((row-newhead_x)**2+(col-newhead_y)**2))>float(r): newheadimg[newhead_x][newhead_y]=[255,255,255] else: newheadimg[newhead_x][newhead_y]=img_arr[newhead_x][newhead_y] #except: # pass Image.fromarray(newheadimg).save("log/"+str(row)+"_"+str(col)+"_"+str(r)+"_"+"headimg.png") #
![1eef5ac811d5e1ef28be9fa167c089e6.png](https://i-blog.csdnimg.cn/blog_migrate/c0de66eee98a9a4d5fcae186a8db9e29.jpeg)
孩子画的悟空图片
图片获取的后的圆形图片
![492651137956c805981a0d181c6ed72b.png](https://i-blog.csdnimg.cn/blog_migrate/b6fb6318726382099637fb7233267f13.jpeg)
圆形图片的截图
环境:python3 win10
#科技青年# #423头条知识节#