湖南建筑公司网站,阳江58同城招聘网,凡科建站容易吗,Wordpress 精确时间分钟最近在学图形学绘制#xff0c;想到了ImagePy框架的ROI涂抹交互很方便#xff0c;于是啃起了绘制代码。这里主要对ImagePy中一个填充工具进行难点讲解。让我们好好学习Python中的图形学绘制吧。例子代码来源#xff1a;https://github.com/Image-Py/imagepy/blob/master/ima…最近在学图形学绘制想到了ImagePy框架的ROI涂抹交互很方便于是啃起了绘制代码。这里主要对ImagePy中一个填充工具进行难点讲解。让我们好好学习Python中的图形学绘制吧。例子代码来源https://github.com/Image-Py/imagepy/blob/master/imagepy/core/draw/polygonfill.pygithub.com疑问 for i in range(len(polys)): for j in range(len(polys[i])): ys.append((i,j,polys[i][j][1])) ys  np.array(ys)转换成一维数组还是转换成适合pandas处理的数据结构polys[i][j][1])代表什么cur  scan(polys, idx, ys[:,2], st, y, cur, buf)一列扫描吗ImagePy_Learn学习系列土盐ImagePy_Learn | 图形学绘制代码学习coredrawfill.py土盐ImagePy_Learn | 图形学绘制代码学习paint.py详解如下round((p1[0]k*p2[0])/(1k),4)参考原文链接Python round() 函数np.sort(rs)参考原文链接np.sort()函数的作用 - Vaxue的博客 - CSDN博客plg[:-1]X[:,0]是numpy中数组的一种写法表示对一个二维数组取该二维数组第一维中的所有数据第二维中取第0个数据直观来说X[:,0]就是取所有行的第0个数据, X[:,-1] 就是取所有行的最后一个数据。 import numpy as np
anp.random.rand(5)
print(a)
[ 0.64061262  0.8451399   0.965673    0.89256687  0.48518743]print(a[-1]) ###取最后一个元素
[0.48518743]print(a[:-1])  ### 除了最后一个取全部
[ 0.64061262  0.8451399   0.965673    0.89256687]print(a[::-1]) ### 取从后向前相反的元素
[ 0.48518743  0.89256687  0.965673    0.8451399   0.64061262]print(a[2::-1]) ### 取从下标为2的元素翻转读取
[ 0.965673  0.8451399   0.64061262]参考原文链接python中[-1]、[:-1]、[::-1]、[n::-1]使用方法 - qq_21840201的博客 - CSDN博客python p[:0]与p[:1]的区别img.shape[:2]img.shape[:2] 取彩色图片的高、宽如果img.shape[:3] 取彩色图片的高、宽、通道 1一般的数组如【2233】 shape是2他表示他是一个一维数组数组中有两个元素注意他和shape21的区别他两个不一样。2[[22],[33]] 他的shape是(2,1),表示二维数组每行有一个元素3[[22,33]] shape是12 他表示一个二维数组每行有两个元素 image.shape[0], 图片垂直尺寸 image.shape[1], 图片水平尺寸 image.shape[2], 图片通道数参考原文链接shape 函数以及shape(2,)和shape21区别区别 image.shape[0],image.shape[1],image.shape[2]st  np.argsort(ys[:,2])numpy.argsort(a, axis-1, kind’quicksort’, orderNone) 功能: 将矩阵a按照axis排序并返回排序后的下标 参数: a:输入矩阵 axis:需要排序的维度 返回值: 输出排序后的下标参考原文链接numpy中实用但不常见的方法(3)np.argsort - cetrol_chen的博客 - CSDN博客bot,top  np.clip([int(ys[:,2].min()-1),int(ys[:,2].max()2)], 0, shape[0])将[int(ys[:,2].min()-1),int(ys[:,2].max()2)]范围外的数强制转化为[0, shape[0]]范围内的数def clip(a, a_min, a_max, outNone): 将数组a中的所有数限定到范围a_min和a_max中即az中所有比a_min小的数都会强制变为a_mina中所有比a_max大的数都会强制变为a_max.其中a_min和a_max可以为一个和a一样大小的数组(列表也可以只要是类似数组的结构就是可行的),则数组中相应位置的元素进行比较。out 是可选项表示把强制截取后的结果放到这个数组中但是out中的数组必须和a形状一样参考原文链接np.clip截取函数 - cloudken - 博客园python中numpy模块下的np.clip()的用法 - IT届的小学生 - CSDN博客idx  ys[:,:2].astype(np.int16)使用方法df.astype(数据类型) #改变整个df的数据类型df[列名].astype(数据类型) #仅改变某一列的数据类型numnum.astype(str)#将整个dataframe都转换为str类型参考原文链接python强制类型转换astype - weixin_42036641的博客 - CSDN博客ys.append((i,j,polys[i][j][1]))numpy.append(arr, values, axisNone):简答来说就是arr和values会重新组合成一个新的数组做为返回值。而axis是一个可选的值当axis无定义时是横向加成返回总是为一维数组Examples-------- np.append([1, 2, 3], [[4, 5, 6], [7, 8, 9]])array([1, 2, 3, 4, 5, 6, 7, 8, 9]) numpu.append(arr,values,axisNone) 将values插入到目标arr的最后。 注意这里values跟arr应该为相同维度的向量参考原文链接numpy的numpy.delete()/insert()/append()函数 - 开贰锤 - CSDN博客对numpy.append()里的axis的用法详解_python_脚本之家ys  np.array(ys)参考原文链接python中数组numpy.array的基本操作 - fu6543210的博客 - CSDN博客np.array(rst).T转置函数.T将原shape为nm的数组转置为mn一维数组转置不变参考原文链接python数据分析(3)--numpy数组形状转换.T/.reshape()/.resize() - weixin_42695959的博客 - CSDN博客rst.extend([(x,y) for x in range(max(x1,o[0]), min(x2, shape[2]))])1. 列表可包含任何数据类型的元素单个列表中的元素无须全为同一类型。2. append() 方法向列表的尾部添加一个新的元素。只接受一个参数。3. extend()方法只接受一个列表作为参数并将该参数的每个元素都添加到原有的列表中。数组拼接方法一思路首先将数组转成列表然后利用列表的拼接函数append()、extend()等进行拼接处理最后将列表转成数组。示例1 import numpy as np anp.array([1,2,5]) bnp.array([10,12,15]) a_listlist(a) b_listlist(b) a_list.extend(b_list) a_list[1, 2, 5, 10, 12, 15] anp.array(a_list) aarray([ 1, 2, 5, 10, 12, 15])该方法只适用于简单的一维数组拼接由于转换过程很耗时间对于大量数据的拼接一般不建议使用。参考原文链接numpy数组拼接方法介绍 - zyl1042635242的专栏 - CSDN博客python中的append的用法 - m0_37870649的博客 - CSDN博客for i in zip(rs[::2],rs[1::2])参考原文链接:Python zip() 函数 | 菜鸟教程源码快查# -*- coding: utf-8 -*-Created on Mon Nov 14 17:40:41 2016
author: yxlfrom __future__ import absolute_import
import numpy as npdef f(p1,p2,y):if abs(p1[1]-y)  abs(p2[1]-y):p1,p2  p2,p1k 1.0* (p1[1]-y)/(y-p2[1])return round((p1[0]k*p2[0])/(1k),4)def scan(polys, idx, ys, st, y, cur, buf):while curlen(idx) and ys[st[cur]]y:c  idx[st[cur]]poly  polys[c[0]]for i in (c[0], (c[1]-1)%len(poly)), tuple(c):if i in buf:buf.remove(i)else: buf.append(i)cur  1return curdef roots(polys, buf, y):rs  []for i in buf:poly  polys[i[0]]i1,i2  i, (i[0],(i[1]1)%len(poly))rs.append(f(poly[i1[1]], poly[i2[1]],y))return np.sort(rs)def fill(plgs, img, color  1, o(0,0)):polys  [np.array(plg[:-1])-0.5 for plg in plgs]shape  img.shape[:2]ys  []for i in range(len(polys)):for j in range(len(polys[i])):ys.append((i,j,polys[i][j][1]))ys  np.array(ys)st  np.argsort(ys[:,2])buf, rst, cur  [], [], 0bot,top  np.clip([int(ys[:,2].min()-1),int(ys[:,2].max()2)], 0, shape[0])idx  ys[:,:2].astype(np.int16)for y in range(bot, top):cur  scan(polys, idx, ys[:,2], st, y, cur, buf)rs  roots(polys, buf, y)for i in zip(rs[::2],rs[1::2]):x1, x2  int(np.ceil(i[0])), int(np.floor(i[1])2)x1, x2  max(x1,0), min(x2, shape[1])if x1  shape[1] or x2  0: continue#rst.extend([(x,y) for x in range(max(x1,o[0]), min(x2, shape[2]))])img[y,x1:x2]  colorreturn np.array(rst).Tif __name__  __main__:import matplotlib.pyplot as pltfrom time import time# pg.shape  (1,4,2)pg  np.array([[(-300,-100),(1100,100),(400,1300),(100,100)]])# img.shape  (1000, 500)img  np.zeros((1000, 500))a  time()rc fill(pg, img)print(time() - a)plt.imshow(img, interpolationnearest,cmapgray)plt.show()print(Done!)