当前位置:首页 » 编程语言 » convertpython

convertpython

发布时间: 2023-06-06 19:09:42

⑴ ❤️【python从入门到精通】(二十七)更进一步的了解Pillow吧!

本文是接上一篇 ❤️【Python从入门到精通】(二十六)用Python的PIL库(Pillow)处理图像真的得心应手❤️ 进一步介绍Pillow库的使用, 本文将重点介绍一些高级特性:比如如何利用Pillow画图形(圆形,正方形),介绍通过Pillow库给图片添加水印;同时对上一篇文章未介绍的常用知识点进行补充说明。希望对读者朋友们有所帮助。

上一篇文章已经介绍了Image模块,但是介绍的还不够全面,例如如何从网页中读取图片没有介绍到,如何裁剪图片都没有介绍到。

读取网页中的图片的基本实现方式是:首先利用requests库读取当前图片链接的内容,接着将内容转成二进制数据,在通过open方法将该二进制数据,最后通过save方法进行保存。

读取结果是:

通过crop方法可以从图片中裁剪出一个指定大小的区域。裁取的区域范围是 (left, upper, right, lower) 比如从某个宽高都是400的图片中裁剪一个是宽高都是100的正方形区域,只需要指定裁剪区域的坐标是: (0, 0, 100, 100)

有裁剪还有一个方法就是重新设置图片大小的方法 resize,比如将前面400 400的图片 修改成 300 200,只需要调用resize方法

通过 convert方法进行图片模式的转换

前面介绍的ImageDraw库,只是介绍了利用它来向图片写入文本,其实ImageDraw模块还有一个更有用的途径,就是可以通过它来画各种图形。

首先创建一个600*600的画布。然后再画布中画出一个正方形,画直线的方法是 line方法。
ImageDraw.line(xy, fill=None, width=0, joint=None)

在xy的坐标之间画一条直线
xy--> 在两个坐标点之间画一条直线,坐标点的传入方式是[(x, y), (x, y), ...]或者[x, y, x, y, ...]
fill--> 直线的颜色
width--> 直线的宽度

画一个边框宽度为2px,颜色为蓝色的,面积为400*400的正方形。

ImageDraw.arc(xy, start, end, fill=None, width=0)

在给定的区域范围内,从开始角到结束角之间绘制一条圆弧
xy--> 定义边界框的两个点,传入的格式是[ (x0, y0), (x1, y1)] 或者 [x0, y0, x1, y1] ,其中 x1>=x0,y1>=y0
start --> 起始角度,以度为单位,从3点钟开始顺时针增加
end--> 结束角度,以度为单位
fill--> 弧线的颜色
width-->弧线的宽度

这里就是画了一个半圆,如果结束角度是360度的话则就会画一个完整的圆。

画圆通过ImageDraw.ellipse(xy, fill=None, outline=None, width=1) 方法,该方法可以画出一个给定范围的圆

xy--> 定义边界框的两个点,传入的格式是[ (x0, y0), (x1, y1)] 或者 [x0, y0, x1, y1] ,其中 x1>=x0,y1>=y0
outline--> 轮廓的颜色
fill ---> 填充颜色
width--> 轮廓的宽度

ImageDraw.chord(xy, start, end, fill=None, outline=None, width=1) 方法用来画半圆,跟arc()方法不同的是它会用直线将起始点和结束点连接起来

xy--> 定义边界框的两个点,传入的格式是[ (x0, y0), (x1, y1)] 或者 [x0, y0, x1, y1] ,其中 x1>=x0,y1>=y0
outline--> 轮廓的颜色
fill ---> 填充颜色
width--> 轮廓的宽度

ImageDraw.pieslice(xy, start, end, fill=None, outline=None, width=1)
类似于arc()方法,不过他会在端点和圆点之间画直线
xy--> 定义边界框的两个点,传入的格式是[ (x0, y0), (x1, y1)] 或者 [x0, y0, x1, y1] ,其中 x1>=x0,y1>=y0
start --> 起始角度,以度为单位,从3点钟开始顺时针增加
end--> 结束角度,以度为单位
fill--> 弧线的颜色
width-->弧线的宽度

ImageDraw.rectangle(xy, fill=None, outline=None, width=1)
xy--> 在两个坐标点之间画一条直线,坐标点的传入方式是[(x, y), (x, y), ...]或者[x, y, x, y, ...]
outline--> 轮廓的颜色
fill--> 填充的颜色
width--> 轮廓线的宽度

ImageDraw.rounded_rectangle(xy, radius=0, fill=None, outline=None, width=1) 该方法可以画一个圆角矩形
xy--> 在两个坐标点之间画一条直线,坐标点的传入方式是[(x, y), (x, y), ...]或者[x, y, x, y, ...]
radius--> 角的半径
outline--> 轮廓的颜色
fill--> 填充的颜色
width--> 轮廓线的宽度

这里有个问题,就是画好的图形如何从Image中扣出来呢?

ImageEnhance模块主要是用于设置图片的颜色对比度亮度锐度等啥的,增强图像。

原始图像

ImageFilter模块主要用于对图像进行过滤,增强边缘,模糊处理,该模块的使用方式是 im.filter(ImageFilter) 。
其中ImageFilter按照需求传入指定的过滤值。

下面一个个试下效果

4.边缘增强

ImageGrab模块主要用于对屏幕进行截图,通过grab方法进行截取,如果不传入任何参数则表示全屏幕截图,否则是截取指定区域的图像。其中box格式是:(x1,x2,y1,y2)

利用Pillow库可以轻易的对图像增加水印
首先,用PIL的Image函数读取图片
接着,新建一张图(尺寸和原图一样)
然后,在新建的图象上用PIL的ImageDraw把字给画上去,字的颜色从原图处获取。

原图

添加文字后的效果图

本文详细介绍了Pillow库的使用,希望对读者朋友们有所帮助。

Pillow官方文档

需要获取源码的小伙伴可以关注下方的公众号,回复【python】

⑵ Python如何图像识别

首先,先定位好问题是属于图像识别任务中的哪一类,最好上传一张植物叶子的图片。因为目前基于深度学习的卷积神经网络(CNN)确实在图像识别任务中取得很好的效果,深度学习属于机器学习,其研究的范式,或者说处理图像的步骤大体上是一致的。

1、第一步,准备好数据集,这里是指,需要知道输入、输出(视任务而定,针对你这个问题,建议使用有监督模型)是什么。你可以准备一个文件夹,里面存放好植物叶子的图像,而每张图像对应一个标签(有病/没病,或者是多类别标签,可能具体到哪一种病)。
具体实现中,会将数据集分为三个:训练集(计算模型参数)、验证集(调参,这个经常可以不需要实现划分,在python中可以用scikit-learn中的函数解决。测试集用于验证模型的效果,与前面两个的区别是,模型使用训练集和验证集时,是同时使用了输入数据和标签,而在测试阶段,模型是用输入+模型参数,得到的预测与真实标签进行对比,进而评估效果。
2、确定图像识别的任务是什么?

图像识别的任务可以分为四个:图像分类、目标检测、语义分割、实例分割,有时候是几个任务的结合。
图像分类是指以图像为输入,输出对该图像内容分类的描述,可以是多分类问题,比如猫狗识别。通过足够的训练数据(猫和狗的照片-标签,当然现在也有一系列的方法可以做小样本训练,这是细节了,这里并不敞开讲),让计算机/模型输出这张图片是猫或者狗,及其概率。当然,如果你的训练数据还有其它动物,也是可以的,那就是图像多分类问题。
目标检测指将图像或者视频中的目标与不感兴趣的部分区分开,判断是否存在目标,并确定目标的具体位置。比如,想要确定这只狗所佩戴的眼睛的位置,输入一张图片,输出眼睛的位置(可视化后可以讲目标区域框出来)。

看到这里,应该想想植物叶子诊断疾病的问题,只需要输入一整张植物叶子的图片,输出是哪种疾病,还是需要先提取叶子上某些感兴趣区域(可能是病变区域),在用病变区域的特征,对应到具体的疾病?
语义分割是当今计算机视觉领域的关键问题之一,宏观上看,语义分割是一项高层次的任务。其目的是以一些原始图像作为输入,输出具有突出显示的感兴趣的掩膜,其实质上是实现了像素级分类。对于输入图片,输出其舌头区域(注意可以是不规则的,甚至不连续的)。

而实例分割,可以说是在语义分割的基础上,在像素层面给出属于每个实例的像素。

看到这里,可以具体思考下自己的问题是对应其中的哪一类问题,或者是需要几种任务的结合。

3、实际操作
可以先通过一个简单的例子入手,先了解构建这一个框架需要准备什么。手写数字识别可以说是深度学习的入门数据集,其任务也经常作为该领域入门的案例,也可以自己在网上寻找。

⑶ python2.7 怎么解析命令行输入的中文参数

本文实例讲述了python读取命令行参数的方法。分享给大家供大家参考。具体分析如下:
如果想对python脚本传参数,python中对应的argc, argv(c语言的命令行参数)是什么呢?
需要模块:sys
参数个数:len(sys.argv)
脚本名: sys.argv[0]
参数1: sys.argv[1]
参数2: sys.argv[2]
test.py:
import sys
print "脚本名:", sys.argv[0]
for i in range(1, len(sys.argv)):
print "参数", i, sys.argv[i]
>>>python test.py hello world

脚本名:test.py
参数 1 hello
参数 2 world
python中使用命令行选项:
例如我们需要一个convert.py脚本。它的作用是处理一个文件,并将处理后的结果输出到另一个文件中。
要求该脚本满足以下条件:
1.通过-i -o选项来区别参数是输入文件还是输出文件.
>>> python convert.py -i inputfile -o outputfile
2.当不知道convert.py需要哪些参数时,用-h打印出帮助信息
>>> python convert.py -h
getopt函数原形:
getopt.getopt(args, options[, long_options])
convert.py:
import sys, getopt
opts, args = getopt.getopt(sys.argv[1:], "hi:o:")
input_file=""
output_file=""
for op, value in opts:
if op == "-i":
input_file = value
elif op == "-o":
output_file = value
elif op == "-h":
usage()
sys.exit()

代码解释:
a) sys.argv[1:]为要处理的参数列表,sys.argv[0]为脚本名,所以用sys.argv[1:]过滤掉脚本名。
b) "hi:o:": 当一个选项只是表示开关状态时,即后面不带附加参数时,在分析串中写入选项字符。当选项后面是带一个附加参数时,在分析串中写入选项字符同时后面加一个":"号。所以"hi:o:"就表示"h"是一个开关选项;"i:"和"o:"则表示后面应该带一个参数。
c) 调用getopt函数。函数返回两个列表:opts和args。opts为分析出的格式信息。args为不属于格式信息的剩余的命令行参数。opts是一个两元组的列表。每个元素为:(选项串,附加参数)。如果没有附加参数则为空串''。
getopt函数的第三个参数[, long_options]为可选的长选项参数,上面例子中的都为短选项(如-i -o)
长选项格式举例:
--version
--file=error.txt
让一个脚本同时支持短选项和长选项
getopt.getopt(sys.argv[1:], "hi:o:", ["version", "file="])
希望本文所述对大家的Python程序设计有所帮助。

⑷ python3 对象 |字典|json|yaml|字符串 相互转化

在研究 k8s 的yaml 配置文件的时候,我总担心自己一不小心 会写错,所以我向往 使用将对象 序列化 yaml 的形式,

其实 python object 可以 直接 转 yaml ,甚至也可以 直接 转成yaml文件!!!

这里 会经常用到几个 函数 vars() ast.

我们先尝试用最笨的方法 实现 object到yaml 的转化
在python对象 convert to dict 的形式,使用 vars()函数

然后 dict convert to json 使用 json.mps(dict)函数

然后 json converte to yaml 使用 ya= yaml.load(json.mps(dict)) 然后
再 yaml.safe_mp(ya,default_flow_style=False)

至此我们看到 从 python Object ---> dict ----> json ---> yaml 的转化

其中 obj dict json yaml 转 string ,只要 str()函数即可,或者 str(vars())结合

yaml 格式 写入到文件 ,需要注意的是, open()函数 的mode 一定要是 'w' ,不能是’wb', b代表是二进制写入
yaml 写入的是dict str,使用 ‘wb' 会报错,[yaml TypeError: a bytes-like object is required, not 'str']
【出现该错误往往是通过open()函数打开文本文件时,使用了‘rb’属性,如:fileHandle=open(filename,'rb'),则此时是通过二进制方式打开文件的,所以在后面处理时如果使用了str()函数,就会出现该错误,该错误不会再python2中出现。

具体解决方法有以下两种:

第一种,在open()函数中使用‘r’属性,即文本方式读取,而不是‘rb’,以二进制文件方式读取,可以直接解决问题。

第二种,在open()函数中使用‘rb’,可以在使用之前进行转换,有以下实例,来自: http://stackoverflow.com/questions/33054527/python-3-5-typeerror-a-bytes-like-object-is-required-not-str 】

其实 python object 可以 直接 转 yaml ,甚至也可以 直接 转成yaml文件!!!
比如我已经定义了一个 Dog python class,他有 好几个属性 并已经赋值初始化了

另外生成 yaml 对象

生成yaml文件

结果是

反过来 yaml ----> json ---> 持久化 json 文件 indent=1属性是为了让 json 不以单行展示,而是展开
注意的是 python 的 dict 和set 很相似 ,都是 { }, set 里是list, dict 是键值对
【# set object is not JSON serializable [plicate]


打开 demo.json

yaml ---> dict

yaml ---> python object

json --> dict
json.loads()

dict--> json
json.jumps()

str ---> dict
newdict=dict(str)

json -- > python object

一个python object无法直接与json转化,只能先将对象转化成dictionary,再转化成json;对json,也只能先转换成dictionary,再转化成object,通过实践,源码如下:

yaml --> python object
对yaml,也只能先转换成json --->dictionary,再转化成object,通过实践,源码如下:

dict -- ->python object

python对象 默认都有一个 私有的属性 dict 取值 就是 object的 字典形式, 赋值就就可以给对象属性对应赋值

例如json 转 对象

对象 转 json

Python之dict(或对象)与json之间的互相转化
在Python语言中,json数据与dict字典以及对象之间的转化,是必不可少的操作。

dict字典转json数据

对象转json数据

json数据转成dict字典

json数据转成对象

json的load()与mp()方法的使用
mp()方法的使用

⑸ 如何实现C与python混合编程

实现C与python混合编程方法
代码如下:

/* tcpportping.c */
#include <Python.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/time.h>

/* count time functions */
static double mytime(void)
{
struct timeval tv;
if (gettimeofday(&tv, NULL) == -1)
return 0.0;

return (double)tv.tv_usec + (double)tv.tv_sec * 1000000;
}

static PyObject * /* returns object */
tcpping(PyObject *self, PyObject *args )
{
struct sockaddr_in addr;
struct hostent *hp;
double time;
char *host = NULL;
int fd;
int port, timeout;

if (!PyArg_ParseTuple(args, "sii", &host, &port, &timeout)) /* convert Python -> C */
return NULL; /* null=raise exception */

if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
return Py_BuildValue("d", -1.0); /* convert C -> Python */
}

bzero((char *)&addr, sizeof(addr));
if ((hp = gethostbyname(host)) == NULL) {
return Py_BuildValue("d", -2.0); /* convert C -> Python */
}
b(hp->h_addr, &addr.sin_addr, hp->h_length);
addr.sin_family = AF_INET;
addr.sin_port = htons(port);

struct timeval tv;

tv.tv_sec = 0;
tv.tv_usec = timeout * 1000;

double stime = mytime();
if (connect(fd, (struct sockaddr*)&addr, sizeof(addr)) < 0) {
return Py_BuildValue("d", -3.0); /* convert C -> Python */
}
fd_set read, write;
FD_ZERO(&read);
FD_ZERO(&write);

FD_SET(fd, &read);
FD_SET(fd, &write);

if (select(fd + 1, &read, &write, NULL, &tv) == 0) {
close(fd);
return Py_BuildValue("d", -4.0); /* convert C -> Python */
}

double etime = mytime();
time = etime - stime;
if (!FD_ISSET(fd, &read) && !FD_ISSET(fd, &write)) {
close(fd);
return Py_BuildValue("d", -4.0); /* convert C -> Python */
}
close(fd);
return Py_BuildValue("d", time/1000); /* convert C -> Python */
}

/* registration table */
static struct PyMethodDef portping_methods[] = {
{"tcpping", tcpping, METH_VARARGS}, /* method name, C func ptr, always-tuple */
{NULL, NULL} /* end of table marker */
};

/* mole initializer */
void inittcpportping( ) /* called on first import */
{ /* name matters if loaded dynamically */
(void) Py_InitMole("tcpportping", portping_methods); /* mod name, table ptr */
}

⑹ 如何用Python将十进制数字转为二进制,以及将二进制转为十六进制

1、将十进制转换成二进制,利用bin()方法。

⑺ python简单的函数定义和用法实例

python简单的函数定义和用法实例
这篇文章主要介绍了python简单的函数定义和用法,实例分析了Python自定义函数及其使用方法,具有一定参考借鉴价值,需要的朋友可以参考下
具体分析如下:
这里定义了一个温度转换的函数及其用法。
def convertTemp(temp, scale):
if scale == "c":
return (temp - 32.0) * (5.0/9.0)
elif scale == "f":
return temp * 9.0/5.0 + 32
temp = int(input("Enter a temperature: "))
scale = input("Enter the scale to convert to: ")
converted = convertTemp(temp, scale)
print("The converted temp is: " + str(converted))

希望本文所述对大家的Python程序设计有所帮助。

热点内容
噪声的危害和控制设计脚本 发布:2025-05-17 08:22:29 浏览:472
esr算法 发布:2025-05-17 08:16:09 浏览:194
安卓手机怎么用拟我表情 发布:2025-05-17 08:10:13 浏览:918
给U盘安装kalilinux 发布:2025-05-17 08:07:26 浏览:249
sql提示存储过程 发布:2025-05-17 07:35:58 浏览:743
qq里的互动访问 发布:2025-05-17 07:26:53 浏览:665
口语易账号密码发送到哪里 发布:2025-05-17 07:26:52 浏览:62
核桃编程幼儿 发布:2025-05-17 07:26:50 浏览:787
2台服务器集群搭建 发布:2025-05-17 07:18:57 浏览:185
北方园林配置植物有哪些 发布:2025-05-17 07:18:20 浏览:544