- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章SciPy中两个模块:io 和misc的使用由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
如果你有一些数据,或者在网上下载到一些有趣的数据集,这些数据以Matlab的.mat 文件格式存储,那么可以使用scipy.io 模块进行读取.
1
|
data
=
scipy.io.loadmat(
'test.mat'
)
|
上面代码中,data 对象包含一个字典,字典中的键对应于保存在原始.mat 文件中的变量名。由于这些变量是数组格式的,因此可以很方便地保存到.mat 文件中.
你仅需创建一个字典(其中要包含你想要保存的所有变量),然后使用savemat() 函数:
1
2
3
|
data
=
{}
data[
'x'
]
=
x
scipy.io.savemat(
'test.mat'
,data)
|
因为上面的脚本保存的是数组x,所以当读入到Matlab 中时,变量的名字仍为x.
因为我们需要对图像进行操作,并且需要使用数组对象来做运算,所以将数组直接保存为图像文件1 非常有用。本书中的很多图像都是这样的创建的.
imsave() 函数可以从scipy.misc 模块中载入。要将数组im 保存到文件中,可以使用下面的命令:
1
2
|
from
scipy.misc
import
imsave
imsave(
'test.jpg'
,im)
|
scipy.misc 模块同样包含了著名的Lena 测试图像:
1
|
lena
=
scipy.misc.lena()
|
该脚本返回一个512×512 的灰度图像数组.
补充:图像预处理的几个模块:PIL、scipy.misc、OpenCV、TensorFlow 。
Python Imaging Library (PIL)是PythonWare公司提供的免费的图像处理工具包,是python下的图像处理模块,支持多种格式,并提供强大的图形与图像处理功能.
虽然在这个软件包上要实现类似MATLAB中的复杂的图像处理算法并不太适合,但是Python的快速开发能力以及面向对象等等诸多特点使得它非常适合用来进行原型开发.
对于简单的图像处理或者大批量的简单图像处理任务,python+PIL是很好的选择.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
from
PIL
import
Image,ImageEnhance
#调用库
im
=
Image.
open
(
"E:/testdata/01.jpg"
)
#打开图片
print
(im.
format
, im.size, im.mode)
#打印图像信息
'''
format:图像属性,如png,jpeg
size:图像分辨率
mode:
1 1位像素,黑和白,存成8位的像素
L 8位像素,黑白
P 8位像素,使用调色板映射到任何其他模式
RGB 3× 8位像素,真彩
RGBA 4×8位像素,真彩+透明通道
CMYK 4×8位像素,颜色隔离
YCbCr 3×8位像素,彩色视频格式
I 32位整型像素
F 32位浮点型像素
'''
new_im
=
im.convert(
'L'
)
# 将图像转为其它模式
new_im.save(
"E:/testdata/02.png"
)
# 保存图像,可以改变图像格式
box
=
(
0
,
0
,
500
,
500
)
# 确定拷贝区域大小(左上角坐标,右下角坐标)
region
=
im.crop(box)
# 将im表示的图片对象拷贝到region中,大小为box
region
=
im.resize((
400
,
400
),Image.ANTIALIAS)
# 改变图像尺寸
'''
函数原型:im.resize(size, filter):
size:所要求的尺寸,是一个二元组:(width, height)
filter:为NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一
'''
im_30
=
im.rotate(
30
, Image.NEAREST,
1
)
# 图像逆时针旋转30度
'''
函数原型:im.rotate(angle,filter=NEAREST, expand=0) ⇒ image
angle:逆时针旋转的角度值
filter:NEAREST、BILINEAR或者BICUBIC之一
expand,如果为true,表示输出图像足够大,可以装载旋转后的图像。
如果为false或者缺省,则输出图像与输入图像尺寸一样大。
'''
r,g,b
=
im.split()
# 分割成三个通道,此时r,g,b分别为三个图像对象。
new_im
=
Image.merge(
"RGB"
,(r,g,b))
# 将r,g,b,三通道合并
example
=
np.random.randint(
0
,
255
,size
=
(
300
,
300
,
3
))
# numpy数组
new_img
=
Image.fromarray(example,
'RGB'
)
# 将numpy的narray转为Image类,第二个参数为mode
new_im.show()
# 显示图像
# ---------将索引图变成彩色图-------------------
cmap
=
[np.random.randint(
0
,
255
)
for
x
in
range
(
768
)]
# 生成色彩隐射图,大小需要为256*3=768
img
=
img.convert(
'P'
)
# 转换为P模式
img.putpalette(cmap)
# 给索引图着色
img.show()
# 显示图像
#----------图像增强-----------------------
# 增强亮度
enhanceImg
=
ImageEnhance.Brightness(img)
# 图片尖锐化
enhanceImg
=
ImageEnhance.Sharpness(img)
# 对比度增强
enhanceImg
=
ImageEnhance.Contrast(img)
# 色彩增强
enhanceImg
=
ImageEnhance.Color(img)
enhanceImg.enhance(
2.0
).show()
# 2.0表示增强两倍,1.0表示不增强。
|
注意:Image只接收uint8类型的数据,如果传入float32类型的数据就会出错.
python在科学计算领域有三个非常受欢迎库,numpy、SciPy、matplotlib.
numpy是一个高性能的多维数组的计算库,SciPy是构建在numpy的基础之上的,它提供了许多的操作numpy的数组的函数。SciPy是一款方便、易于使用、专为科学和工程设计的python工具包,它包括了统计、优化、整合以及线性代数模块、傅里叶变换、信号和图像图例,常微分方差的求解等.
下面就简单的介绍一下SciPy在图像处理方面的应用,如果专业做图像处理当然还是建议使用opencv.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
from
scipy.misc
import
imread,imsave,imresize
import
scipy.io
img
=
imread(
"E:/testdata/01.jpg"
)
# 读取图像
print
(img)
# numpy 数组
img_type
=
img.dtype
# 获取图片的数据类型
print
(img_type)
# uint8
img_shape
=
img.shape
# 获取图片的大小
print
(img_shape)
# (310, 493, 3)
newimg
=
imresize(img,(
100
,
100
))
# 图像裁剪
'''
函数原型:imresize(arr, size, interp='bilinear', mode=None)
arr:ndarray类型的图像
size:裁剪后的尺寸,是一个元组
interp : 插值方法,为‘nearest', ‘lanczos', ‘bilinear', ‘bicubic' or ‘cubic'
mode:PIL中的图像模式 (‘P', ‘L'等等),在resize之前先转换模式
'''
imsave(
"timg_color.png"
,newimg)
# 保存图片
# ------------使用scipy加载.mat文件-------------
data
=
scipy.io.loadmat(
'Data.mat'
)
print
(data)
# 一般data为一个字典类型的数据
|
OpenCV是一个开放源代码的计算机视觉应用平台,由英特尔公司下属研发中心俄罗斯团队发起该项目,开源BSD证书,OpenCV的目标是实现实时计算机视觉,,是一个跨平台的计算机视觉库。从开发之日起就得到了迅猛发展,获得了众多公司和业界大牛的鼎力支持与贡献,因为是BSD开源许可,因此可以免费应用在科研和商业应用领域.
OpenCV中已经包含如下应用领域功能:二维和三维特征工具箱、运动估算、人脸识别系统、姿势识别、人机交互、移动机器人、运动理解、对象鉴别、分割与识别、立体视觉、运动跟踪、增强现实(AR技术)。基于上述功能实现需要,OpenCV中还包括以下基于统计学机器学习库:Boosting算法、Decision Tree(决策树)学习、Gradient Boosting算法、EM算法(期望最大化)、KNN算法、朴素贝叶斯分类、人工神经网络、随机森林、支掌向量机.
编程语言:OpenCV中多数模块是基于C++实现,其中有少部分是基于C语言实现,当前OpenCV提供的SDK已经支持C++、Java、Python等语言应用开发。当前OpenCV本身新开发的算法和模块接口都是基于C++产生。OpenCV-Python使用Numpy,这是一个高度优化的数据库操作库,具有MATLAB风格的语法。所有OpenCV数组结构都转换为Numpy数组。这也使得与使用Numpy的其他库(如SciPy和Matplotlib)集成更容易。接下来介绍OpenCV的核心操作:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
import
cv2
img
=
cv2.imread(
'E:/testdata/01.jpg'
)
# 读取图像
print
( img.shape )
print
(img)
b,g,r
=
cv2.split(img)
# 拆分图像通道
img
=
cv2.merge((b,g,r))
# 合并图像通道
res
=
cv2.resize(img,(
50
,
50
),interpolation
=
cv2.INTER_CUBIC)
# 图像缩放
'''
INTER_NEAREST 最近邻插值
INTER_LINEAR 双线性插值(默认设置)
INTER_AREA 使用像素区域关系进行重采样。 它可能是图像抽取的首选方法,因为它会产生无云纹理的结果。 但是当图像缩放时,它类似于INTER_NEAREST方法。
INTER_CUBIC 4x4像素邻域的双三次插值
INTER_LANCZOS4 8x8像素邻域的Lanczos插值
'''
img
=
cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 转换读取图像的通道顺序,cv2默认为BGR顺序,这里转为RGB,其它软件均为RGB
cv2.imwrite(
"hehe.jpg"
,res)
# 保存图像
cv2.imshow(
"res"
,res)
# 显示图像
cv2.waitKey(
0
)
cv2.destroyAllWindows()
|
注意:cv2默认为 BGR顺序,而其他软件(PIL、scopy.misc)一般使用RGB,所以当cv2和其它混用时需要用cv2.cvtColor()转换通道 。
1
2
3
4
|
tf.image.decode_jpeg(contents, channels
=
None
, ratio
=
None
, fancy_upscaling
=
None
, try_recover_truncated
=
None
, acceptable_fraction
=
None
, name
=
None
)
tf.image.encode_jpeg(image,
format
=
None
, quality
=
None
, progressive
=
None
, optimize_size
=
None
, chroma_downsampling
=
None
, density_unit
=
None
, x_density
=
None
, y_density
=
None
, xmp_metadata
=
None
, name
=
None
)
tf.image.decode_png(contents, channels
=
None
, name
=
None
)
tf.image.encode_png(image, compression
=
None
, name
=
None
)
|
1
2
3
4
5
|
tf.image.resize_images(images, new_height, new_width, method
=
0
)
tf.image.resize_area(images, size, name
=
None
)
tf.image.resize_bicubic(images, size, name
=
None
)
tf.image.resize_bilinear(images, size, name
=
None
)
tf.image.resize_nearest_neighbor(images, size, name
=
None
)
|
1
2
3
4
5
|
tf.image.resize_image_with_crop_or_pad(image, target_height, target_width)
tf.image.pad_to_bounding_box(image, offset_height, offset_width, target_height, target_width)
tf.image.crop_to_bounding_box(image, offset_height, offset_width, target_height, target_width)
tf.image.random_crop(image, size, seed
=
None
, name
=
None
)
tf.image.extract_glimpse(
input
, size, offsets, centered
=
None
, normalized
=
None
, uniform_noise
=
None
, name
=
None
)
|
1
2
3
4
|
tf.image.flip_up_down(image)
tf.image.random_flip_up_down(image, seed
=
None
)
tf.image.flip_left_right(image)
tf.image.random_flip_left_right(image, seed
=
None
)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#coding=utf-8
import
tensorflow as tf
import
numpy as np
import
os
from
PIL
import
Image
# 从文件读取数据,得到的是二进制文件
image_data
=
tf.gfile.FastGFile(
"D:/test/2.jpg"
,
'rb'
).read()
with tf.Session() as sess:
# 将二进制数据解码为一个Tensor,此时的数据类型为tf.uint8
img_data
=
tf.image.decode_jpeg(image_data)
print
(img_data.
eval
().shape)
# 对图像进行resize,0:双线性差值。1:最近邻居法。2:双三次插值法。3:面积插值法。
resized
=
tf.image.resize_images(img_data, [
500
,
500
], method
=
0
)
# TensorFlow的函数处理图片后存储的数据是float32格式的,需要转换成uint8才能正确打印图片。
resized
=
np.asarray(resized.
eval
(), dtype
=
'uint8'
)
# 显示图片
new_img
=
Image.fromarray(resized,
'RGB'
)
new_img.show()
# 对图像进行编码,并且保存图像
encoded_image
=
tf.image.encode_jpeg(resized)
print
(
type
(encoded_image))
with tf.gfile.GFile(
"./3.jpg"
,
"wb"
) as f:
f.write(encoded_image.
eval
())
|
1
|
tf.image.convert_image_dtype(image,dtype)
|
如果传入的数据类型为uint8,该函数可以将0-255的uint8类型的像素值归一化为0-1。如果传入的数据类型为tf.float32,则该函数对图像不做任何处理。如果传入的数据类型为tf.int32,则处理后会变成极小的小数.
原文链接:https://blog.csdn.net/jinbeibei0606/article/details/77840771 。
最后此篇关于SciPy中两个模块:io 和misc的使用的文章就讲到这里了,如果你想了解更多关于SciPy中两个模块:io 和misc的使用的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在使用 Web 服务在 Android 应用程序和 SOAP Web 服务之间发送数据。此 Web 服务仅接受序列化对象,而执行此操作的唯一方法是使用: import sun.misc.BASE6
我正在将 JDK 版本从 8 更新到 11,以解决某些并发数据结构的问题。 error: type Contended is not a member of package sun.misc [ERR
scipy.misc.logsumexp函数的输入参数有(a, axis=None, b=None, keepdims=False, return_sign=False),具体配置可参见这里,返回的
我刚刚安装了 scipy(通过 easy_install scipy),但由于某些原因 scipy.misc 丢失了。 看看这个: >>> import scipy >>> scipy >>> sc
在 kate(或 QtCreator)中,我有一个名为“Fixed[Misc]”的字体。我想检索字体文件,但没有找到:在我的字体目录中,我有一个“misc”目录,但我无法准确找到我在 kate 中使用
我在 python 脚本中导入 scipy.misc 时遇到问题。现在我知道其他人也提出了与此相关的问题,但他们的解决方案对我不起作用。 我正在编写的程序是这样开始的: import matplotl
我一直在使用 sun.misc 中的 BASE64Encoder 和 BASE64Decoder;我正在使用 Eclipse 并且不得不求助于警告,因为默认情况下访问权限仅限于它。 这些类工作得很好,
前言 unsafe类在jdk 源码的多个类中用到,这个类的提供了一些绕开jvm的更底层功能,基于它的实现可以提高效率。但是,它是一把双刃剑:正如它的名字所预示的那样,它是unsafe的,它所分配的
我正在使用具有以下导入的 scipy 1.3.1 运行旧代码: from scipy.misc import bytescale 出现以下错误: ImportError: cannot import
10 分钟前,我尝试连接 phppgadmin 5.1,但我在 Web 服务器错误日志中发现了此错误消息:“Misc 在/usr/share/phppgadmin/classes/Misc.php 第
我想调整表面法线“图像”(H * W * 3)的大小。问题在于数组中存在可取数字。如何使用scipy.misc.resize或cv2.resize调整大小? 最佳答案 cv2.resize支持负数。
jdk1.8.0_144中的src.zip包含Float.java 这又指的是 sun.misc.FloatingDecimal。我在 src.zip 中找不到它?谁能告诉我它在哪里?我可以找到 gr
我正在开发一个供其他团队使用的库,在库中有一些公开的类/方法,但我不希望其他人使用它们。 像java中的sun.misc包这样的东西,虽然所有的类都是公共(public)的,但编译器在使用它时会抛出“
10 分钟前,我尝试连接 phppgadmin 5.1,但我在 Web 服务器错误日志中发现了此错误消息:“Misc 在/usr/share/phppgadmin/classes/Misc.php 第
虽然也有类似的问题(例如 A 、 B 和 C ),但他们的答案并不能解决我的问题。 我使用的是针对 Android API 18 的 Android Studio 1.5.1(Android KitK
我将在我的代码中使用 sun.misc.BASE64Decoder 的 decodeBuffer(String inputString) 。多个线程将在同一个解码器对象上调用此函数。 这个线程安全吗?
我知道 sun.* 包不是官方 Java API 的一部分。但是,我需要使用一些类似于 Perf 提供的功能:特别是基本 JVM 指标(堆、线程、PermGen 等)、GC 的 JvmStat 计数器
我有一个选项卡设置为使用 API8 max 的 Activity 扩展。在此选项卡中,我正在初始化一些 TextView、EditText 和 SeekBar 对象,如下所示。 我正在寻找一种更通用的
sun.misc.Unsafe 或 theUnsafe 实例线程安全吗? 最佳答案 Unsafe 的方法不是线程安全的。您需要像往常一样同步访问您想要自己操作的数据。然而,访问实例 theUnsafe
我想知道我在这里做错了什么...... 我正在试验一个简单而人为的函数,它对某些 x 值求导: f(x) = x^3,然后计算导数 f'(x) = 3x^2 对于 x 在 1、2、3 处的值 >>>
我是一名优秀的程序员,十分优秀!