Python---Image图像处理

news/2024/12/28 9:57:06/

python处理图像

将图片转换为向量

所需的库:
在python3的环境之下,PIL库改名为为pillow

conda install pillow
from PIL import Image
import numpy as np

导入本地图片,img为临时存储对象

img = Image.open(path)

因为有些图片读取后不止gbk三个通道,所以我们可以先运行一次下面的代码,查看各通道

print(img.split())
(<PIL.Image.Image image mode=L size=84x225 at 0x10278C50>, 
<PIL.Image.Image image mode=L size=84x225 at 0x102E1F28>, 
<PIL.Image.Image image mode=L size=84x225 at 0x102F3550>, 
<PIL.Image.Image image mode=L size=84x225 at 0x102F3A20>)

表明该图具有四个通道,每个通道的size为84x225
获取每个通道

g,b,k,d = img.split()

每个通道 g,b,k,d可单独输出显示其通道下的图像,
注: 笔者发现虽然获得的是四个通道,但第四个通道下得到的为空
使用numpy获取每个通道下的向量矩阵

np.array(g).reshape(1,84*225)[0]
np.array(b).reshape(1,84*225)[0]
np.array(k).reshape(1,84*225)[0]

注: 有时候上述np.array(g)的方法不能够顺利完成转换,会报错误:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'Image'

可转而使用下列方式进行转换

img = Image.open("/home/lw/a.jpg")
img.show() 
img = np.array(img)      # image类 转 numpy
vec= img[:,:,0]        #第1通道
one=Image.fromarray(vec) # numpy 转 image类
one.show()

至此完成图片至向量的转换

图像的几何变换

Image类有resize()、rotate()和transpose()方法进行几何变换。
1、图像的缩放和旋转

dst = img.resize((128, 128))  # 改变图片的像素大小
dst = img.rotate(45) # 顺时针角度表示

2、转换图像

dst = im.transpose(Image.FLIP_LEFT_RIGHT) #左右互换
dst = im.transpose(Image.FLIP_TOP_BOTTOM) #上下互换
dst = im.transpose(Image.ROTATE_90)  #顺时针旋转
dst = im.transpose(Image.ROTATE_180)
dst = im.transpose(Image.ROTATE_270)#	transpose()和rotate()没有性能差别。

3、图片平移

image = cv2.imread(image_path)
img_info = image.shape
height = img_info[0]
width = img_info[1]
mat_trans = np.float32([[1, 0, 20], [0, 1, 30]])
# [[1,0,20],[0,1,30]]   表示平移变换:其中20表示水平方向右的平移距离,30表示竖直方向下的平移距离。
# [[1,0,-20],[0,1,-30]]   表示平移变换:其中-20表示水平方向左的平移距离,-30表示竖直方向上的平移距离。
dst = cv2.warpAffine(image, mat_trans, (width, height))  # 变换函数
cv2.imwrite(save_path, dst)

向量与图片的转换

以cifar10为例,每张图片的向量矩阵为(32,32,3)

# img.shape = (32,32,3)
# img 保存的是其中一个样本的向量矩阵
img = Image.fromarray(img.astype('uint8')).convert('RGB')
plt.imshow(img) # 打印该图片
# 或者
img = Image.open("/home/lw/a.jpg")
img.show() # 会打开电脑的图片查看器显示图片
img = np.array(img)      # image类 转 numpy
img =Image.fromarray(img ) # numpy 转 image类
img .show()

另可参考博客:
python处理图片
PIL官方
Python图像库PIL的类Image及其方法介绍


http://www.ppmy.cn/news/572607.html

相关文章

Image_utils

public class ImageUtil { // 放大缩小图片 public static Bitmap zoomBitmap(Bitmap bitmap, int w, int h) { int width bitmap.getWidth(); int height bitmap.getHeight(); Matrix matrix new Matrix(); float scaleWidht ((float) w / width); float scaleHeight ((f…

解决ImageReady输出Gif颜色失真

GIF图片&#xff0c;在制作过程中&#xff0c;包括原图都没有出现问题&#xff0c;经常就是在优化另存为后或是直接点优化后&#xff0c;整个图片的颜色变色了&#xff0c;或者图片上出现斑斑点点&#xff0c;得到的gif图图色彩不如在ImageReady预览里的好看&#xff0c;这都是…

ImageView

ImageView&#xff0c;图像视图&#xff0c;直接继承自View类&#xff0c;它的主要功能是用于显示图片&#xff0c;实际上它不仅仅可以用来显示图片&#xff0c;任何Drawable对象都可以使用ImageView来显示。ImageView可以适用于任何布局中&#xff0c;并且Android为其提供了缩…

python-Image处理图片

使用python来处理图片是非常方便的&#xff0c;下面提供一小段python处理图片的代码&#xff0c;需要安装图像处理工具包PIL(Python Image Library)。 #codingutf-8import Image import urllib2 import StringIO import os#改变图片大小 def resize_img(img_path):try:img Im…

ImageData

/// The alignment of the terrain 地形的对齐模式enum Alignment//地形的对齐模式{/// Terrain is in the X/Z planeALIGN_X_Z 0, //地形的对其方式/// Terrain is in the X/Y planeALIGN_X_Y 1, /// Terrain is in the Y/Z planeALIGN_Y_Z 2};/** Structure encapsulating…

Image 图片

Image 图片 随机矩阵画图 这一节我们讲解怎样在matplotlib中打印出图像。这里打印出的是纯粹的数字&#xff0c;而非自然图像。下面用 3x3 的 2D-array 来表示点的颜色&#xff0c;每一个点就是一个pixel。 import matplotlib.pyplot as plt import numpy as npa np.array([0.…

image 读取 imagelist 里面图片

var i:integer1; procedure TForm4.BitBtn1Click(Sender: TObject); beginInc(i); if i>ImageList1.Count-1 then i:0;ImageList1.GetBitmap(i,image1.Picture.Bitmap) ; Self.Refresh; end;转载于:https://www.cnblogs.com/xh0626/p/5078289.html