python怎么做图像处理_python 做图像处理 - CSDN
精华内容
参与话题
  • 教你用Python做图像处理

    万次阅读 多人点赞 2018-11-18 15:02:40
    提到图像处理第一个想到的库就是PIL,全称Python Imaging Library Python图像处理类库,它提供了大量的图像操作,比如图像缩放,裁剪,贴图,模糊等等,很多时候它需要配合numpy库一起使用 1.open() 你可以使用...

    质量、速度、廉价,选择其中两个

    提到图像处理第一个想到的库就是PIL,全称Python Imaging Library Python,图像处理类库,它提供了大量的图像操作,比如图像缩放,裁剪,贴图,模糊等等,很多时候它需要配合numpy库一起使用

    1.open()

    你可以使用Image.open打开一个图像文件,它会返回PIL图像对象

    image = Image.open(image_address)

    2.covert()

    你可以 covert() 方法转换图像格式,covert() 有三种传参方式

    im.convert(mode) ⇒ image

    im.convert(“P”, **options) ⇒ image

    im.convert(mode, matrix) ⇒ image

    最常用的还是第一种,通过该方法你可以将PIL图像转换成九种不同的格式,分别1,L,P,RGB,RGBA,CMYK,YCbCr,I,F。

    1.模式“1”

    模式“1”为二值图像,非黑即白。但是它每个像素用8个bit表示,0表示黑,255表示白。

    2.模式“L”

    模式”L”为灰色图像,它的每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度。在PIL中,从模式“RGB”转换为“L”模式是按照下面的公式转换的:

    L = R * 299/1000 + G * 587/1000+ B * 114/1000

    3.模式“p”

    模式“P”为8位彩色图像,它的每个像素用8个bit表示,其对应的彩色值是按照调色板查询出来的。

    4.模式“RGBA”

    模式“RGBA”为32位彩色图像,它的每个像素用32个bit表示,其中24bit表示红色、绿色和蓝色三个通道,另外8bit表示alpha通道,即透明通道。

    5.模式“CMYK”

    模式“CMYK”为32位彩色图像,它的每个像素用32个bit表示。模式“CMYK”就是印刷四分色模式,它是彩色印刷时采用的一种套色模式,利用色料的三原色混色原理,加上黑色油墨,共计四种颜色混合叠加,形成所谓“全彩印刷”。

    四种标准颜色是:C:Cyan = 青色,又称为‘天蓝色’或是‘湛蓝’M:Magenta = 品红色,又称为‘洋红色’;Y:Yellow = 黄色;K:Key Plate(blacK) = 定位套版色(黑色)。

    6.模式“YCbCr”

    模式“YCbCr”为24位彩色图像,它的每个像素用24个bit表示。YCbCr其中Y是指亮度分量,Cb指蓝色色度分量,而Cr指红色色度分量。人的肉眼对视频的Y分量更敏感,因此在通过对色度分量进行子采样来减少色度分量后,肉眼将察觉不到的图像质量的变化。

    模式“RGB”转换为“YCbCr”的公式如下:

    Y= 0.257*R+0.504*G+0.098*B+16
    Cb = -0.148*R-0.291*G+0.439*B+128
    Cr = 0.439*R-0.368*G-0.071*B+128

    7.模式“I”

    模式“I”为32位整型灰色图像,它的每个像素用32个bit表示,0表示黑,255表示白,(0,255)之间的数字表示不同的灰度。在PIL中,从模式“RGB”转换为“I”模式是按照下面的公式转换的:

    I = R * 299/1000 + G * 587/1000 + B * 114/1000

    8.模式“F”

    模式“F”为32位浮点灰色图像,它的每个像素用32个bit表示,0表示黑,255表示白,(0,255)之间的数字表示不同的灰度。在PIL中,从模式“RGB”转换为“F”模式是按照下面的公式转换的:

    F = R * 299/1000+ G * 587/1000 + B * 114/1000

    3.调整尺寸、创建缩略图、裁剪、贴图、旋转

    PIL库给我们提供了丰富基本图像操作,如果你想调整一张图片的尺寸,你可以使用resize()方法,该方法需要传入你指定新图像宽高的元组

    img = img.resize((128,128))

    如果你想创建一张图片的缩略图,你可以使用thumbnail()方法,该方法需要传入缩略图的宽高元组

    img=img.thumbnail((128,128))

    如果你想对一张图片的一部分进行裁剪,你可以使用crop()方法,该方法需要你传入一个元组,该元组指定裁剪区域的左上角坐标和右下角坐标

    box = (100,100,400,400)
    img = img.crop(box)

    如果你想把一张图片覆盖在另一个图片的上面,你可以使用paste()方法,该方法需要传入要贴的图片和位置(左上角坐标和右下角坐标)

    img2=img2.paste(img1,(100,100,200,200))

    如果你想要旋转一张图片,你可以使用transpose()方法,该方法传入旋转角度

    img = img.transpose(Image.ROTATE_180)

    不过这些角度很受限制,只可以传下面之中的一个

    • PIL.Image.FLIP_LEFT_RIGHT 
    • PIL.Image.FLIP_TOP_BOTTOM
    • PIL.Image.ROTATE_90
    • PIL.Image.ROTATE_180
    • PIL.Image.ROTATE_270
    • PIL.Image.TRANSPOSE
    • PIL.Image.TRANSVERSE

    你也可以使用rotate()方法,该方法更为简单方便,只需要传入一个旋转角度即可

    image = image.rotate(45)

    4.Numpy

    对图像进行变换其实就是对矩阵进行变换,我们需要把一张图片转换成矩阵再进行操作,使用array()方法

    image = Image.open(image_address)
    imageArray = array(image)

    1.反向处理与二值化

    图像一般都是三通道的,也就是红绿蓝,他们的值从0-255,所谓反相处理呢,就是把颜色反过来

    imageArray = 255 - imageArray

     图像的二值化也很简单,0-255以128为分界,小于128置为0否则置为1

    imageArray = 1 * (imageArray < 128)

    2.像素值限制范围

    如果你想把一个图像的像素值都限制到一个范围内,比如说你想把像素值限制到100-200这个区间上,你可以这么干

    imageArray = (100.0 / 255) * imageArray + 100

    3.像素值求平方

    imageArray = 255.0 * (imageArray / 255.0) ** 2

    4.直方图均衡化

    图像灰度变换中一个非常有用的例子就是直方图均衡化。直方图均衡化是指将一幅图像的灰度直方图变平,使变换后的图像中每个灰度值的分布概率都相同。在对图像做进一步处理之前,直方图均衡化通常是对图像灰度值进行归一化的一个非常好的方法,并且可以增强图像的对比度。

    在这种情况下,直方图均衡化的变换函数是图像中像素值的累积分布函数(cumulative distribution function,简写为 cdf,将像素值的范围映射到目标范围的归一化操作)

    def histeq(im,nbr_bins=256):
        """ 对一幅灰度图像进行直方图均衡化"""
        # 计算图像的直方图
        imhist,bins = histogram(im.flatten(),nbr_bins,normed=True)
        cdf = imhist.cumsum()
        # cumulative distribution function
        cdf = 255 * cdf / cdf[-1]
        #  归一化
        #  使用累积分布函数的线性插值,计算新的像素值
        im2 = interp(im.flatten(),bins[:-1],cdf)
        return im2.reshape(im.shape), cdf

    该函数有两个输入参数,一个是灰度图像,一个是直方图中使用小区间的数目。函数返回直方图均衡化后的图像,以及用来做像素值映射的累积分布函数。注意,函数中使用到累积分布函数的最后一个元素(下标为 -1),目的是将其归一化到 0...1 范围。

    直方图均衡化后图像可以使对比度增强,使原先图像灰色区域的细节变得更清晰

    5.多种滤波

    gaussian滤波是多维的滤波器,是一种平滑滤波,可以消除高斯噪声

    通过调节sigma的值来调整滤波效果

    imageArray = filters.gaussian_filter(imageArray, 5)

    sobel算子可用来检测边缘

    edges = filters.sobel(img)

    roberts算子、scharr算子、prewitt算子和sobel算子一样,用于检测边缘

    edges = filters.roberts(img)
    edges = filters.scharr(img)
    edges = filters.prewitt(img)

    canny算子也是用于提取边缘特征,但它不是放在filters模块,而是放在feature模块

    edges1 = feature.canny(img)   #sigma=1
    edges2 = feature.canny(img,sigma=3)   #sigma=3

    gabor滤波可用来进行边缘检测和纹理特征提取。

    通过修改frequency值来调整滤波效果,返回一对边缘结果,一个是用真实滤波核的滤波结果,一个是想象的滤波核的滤波结果。

    filt_real, filt_imag = filters.gabor_filter(img,frequency=0.6)   

    6.PCA

    PCA(Principal Component Analysis,主成分分析)是一个非常有用的降维技巧。它可以在使用尽可能少维数的前提下,尽量多地保持训练数据的信息,在此意义上是一个最佳技巧。即使是一幅 100×100 像素的小灰度图像,也有 10 000 维,可以看成 10 000 维空间中的一个点。一兆像素的图像具有百万维。由于图像具有很高的维数,在许多计算机视觉应用中,我们经常使用降维操作。PCA 产生的投影矩阵可以被视为将原始坐标变换到现有的坐标系,坐标系中的各个坐标按照重要性递减排列。

    为了对图像数据进行 PCA 变换,图像需要转换成一维向量表示。我们可以使用 NumPy 类库中的 flatten() 方法进行变换。

    将变平的图像堆积起来,我们可以得到一个矩阵,矩阵的一行表示一幅图像。在计算主方向之前,所有的行图像按照平均图像进行了中心化。我们通常使用 SVD(Singular Value Decomposition,奇异值分解)方法来计算主成分;但当矩阵的维数很大时,SVD 的计算非常慢,所以此时通常不使用 SVD 分解。下面就是 PCA 操作的代码:

    def pca(X):
        """ 主成分分析:    输入:矩阵X ,其中该矩阵中存储训练数据,每一行为一条训练数据
           返回:投影矩阵(按照维度的重要性排序)、方差和均值"""
        # 获取维数
        num_data,dim = X.shape
        # 数据中心化
        mean_X = X.mean(axis=0)
        X = X - mean_X
        if dim<num_data:
            # PCA- 使用紧致技巧
            M = dot(X,X.T)
            # 协方差矩阵
            e,EV = linalg.eigh(M)
            # 特征值和特征向量
            tmp = dot(X.T,EV).T
            # 这就是紧致技巧
            V = tmp[::-1]
            # 由于最后的特征向量是我们所需要的,所以需要将其逆转
            S = sqrt(e)[::-1]
            # 由于特征值是按照递增顺序排列的,所以需要将其逆转
            for i in range(V.shape[1]):
                V[:,i] /= S
        else:
            # PCA- 使用SVD 方法
            U,S,V = linalg.svd(X)
            V = V[:num_data]
            # 仅仅返回前nun_data 维的数据才合理
            #  返回投影矩阵、方差和均值
        return V,S,mean_X

    7.图像添加噪声和降噪

    添加噪声比降噪简单得多,只需要把图像矩阵上面随机加一些值就好了

    imageArray = imageArray + 30 * random.standard_normal(imageArray.shape)

    图像降噪是在去除图像噪声的同时,尽可能地保留图像细节和结构的处理技术,我们这里使用 ROF去燥模型

    一幅(灰度)图像 I 的全变差(Total Variation,TV)定义为梯度范数之和。在连续表示的情况下,全变差表示为:

    J(\boldsymbol{I})=\int\left|\nabla\boldsymbol{I}\right|\text{dx} 

    在离散表示的情况下,全变差表示为:

    J(\boldsymbol{I})=\sum_{\text{x}}\left|\nabla\boldsymbol{I}\right|

    其中,上面的式子是在所有图像坐标 x=[x, y] 上取和。

    在 Chambolle 提出的 ROF 模型里,目标函数为寻找降噪后的图像 U,使下式最小:

    \min_U\left|\left|\boldsymbol{I}-\boldsymbol{U}\right|\right|^2+2\lambda J(\boldsymbol{U}),

    其中范数 ||I-U|| 是去噪后图像 U 和原始图像 I 差异的度量。也就是说,本质上该模型使去噪后的图像像素值“平坦”变化,但是在图像区域的边缘上,允许去噪后的图像像素值“跳跃”变化。

    def denoise(im,U_init,tolerance=0.1,tau=0.125,tv_weight=100):
        """ 使用A. Chambolle(2005)在公式(11)中的计算步骤实现Rudin-Osher-Fatemi(ROF)去噪模型
           输入:含有噪声的输入图像(灰度图像)、U 的初始值、TV 正则项权值、步长、停业条件
            输出:去噪和去除纹理后的图像、纹理残留"""
        m,n = im.shape # 噪声图像的大小
    
        #  初始化
        U = U_init
        Px = im # 对偶域的x 分量
        Py = im # 对偶域的y 分量
        error = 1
        while (error > tolerance):
            Uold = U
    
            # 原始变量的梯度
            GradUx = roll(U,-1,axis=1)-U # 变量U 梯度的x 分量
            GradUy = roll(U,-1,axis=0)-U # 变量U 梯度的y 分量
    
            #  更新对偶变量
            PxNew = Px + (tau/tv_weight)*GradUx
            PyNew = Py + (tau/tv_weight)*GradUy
            NormNew = maximum(1,sqrt(PxNew**2+PyNew**2))
            Px = PxNew/NormNew # 更新x 分量(对偶)
            Py = PyNew/NormNew # 更新y 分量(对偶)
            #  更新原始变量
            RxPx = roll(Px,1,axis=1) # 对x 分量进行向右x 轴平移
            RyPy = roll(Py,1,axis=0) # 对y 分量进行向右y 轴平移
    
            DivP = (Px-RxPx)+(Py-RyPy) # 对偶域的散度
            U = im + tv_weight*DivP # 更新原始变量
    
            #  更新误差
            error = linalg.norm(U-Uold)/sqrt(n*m);
        return U,im-U  # 去噪后的图像和纹理残余
    

    5.Matplotlib

    我们队图像进行处理之后往往需要知道处理后变化如何,该库便可以方便地绘制出条形图,饼状图等等呢个图像,还可在上面添加标记等等

    尽管 Matplotlib 可以绘制出较好的条形图、饼状图、散点图等,但是对于大多数计算机视觉应用来说,仅仅需要用到几个绘图命令。最重要的是,我们想用点和线来表示一些事物,比如兴趣点、对应点以及检测出的物体。下面是用几个点和一条线绘制图像的例子:

    from PIL import Image
    from pylab import *
    
    # 读取图像到数组中
    im = array(Image.open('empire.jpg'))
    
    # 绘制图像
    imshow(im)
    
    # 一些点
    x = [100,100,400,400]
    y = [200,500,200,500]
    
    # 使用红色星状标记绘制点
    plot(x,y,'r*')
    
    # 绘制连接前两个点的线
    plot(x[:2],y[:2])
    
    # 添加标题,显示绘制的图像
    title('Plotting: "empire.jpg"')
    show()

    上面的代码首先绘制出原始图像,然后在 x 和 y 列表中给定点的 x 坐标和 y 坐标上绘制出红色星状标记点,最后在两个列表表示的前两个点之间绘制一条线段(默认为蓝色)。该例子的绘制结果如图 1-2 所示。show() 命令首先打开图形用户界面(GUI),然后新建一个图像窗口。该图形用户界面会循环阻断脚本,然后暂停,直到最后一个图像窗口关闭。在每个脚本里,你只能调用一次 show() 命令,而且通常是在脚本的结尾调用。注意,在 PyLab 库中,我们约定图像的左上角为坐标原点。

    图像的坐标轴是一个很有用的调试工具;但是,如果你想绘制出较美观的图像,加上下列命令可以使坐标轴不显示:

    axis('off')

     下面是我写的一个图像处理的脚本

    import PIL.Image as Image
    import os
    from pylab import *
    from numpy import *
    from scipy.ndimage import filters
    from scipy.ndimage import measurements,morphology
    
    
    def get_imlist(path):
        # 一级文件夹下有用
        # return [os.path.join(path, f) for f in os.listdir(path) if f.endswith('.jpg')]
        g = os.walk(path)
        image_list=[]
        for path, d, filelist in g:
            for filename in filelist:
                if filename.endswith('jpg'):
                    image_list.append(os.path.join(path, filename))
        return image_list
    
    def histeq(im,nbr_bins=256):
        """ 对一幅灰度图像进行直方图均衡化"""
        # 计算图像的直方图
        imhist,bins = histogram(im.flatten(),nbr_bins,normed=True)
        cdf = imhist.cumsum()
        # cumulative distribution function
        cdf = 255 * cdf / cdf[-1]
        #  归一化
        #  使用累积分布函数的线性插值,计算新的像素值
        im2 = interp(im.flatten(),bins[:-1],cdf)
        return im2.reshape(im.shape), cdf
    
    def pca(X):
        """ 主成分分析:    输入:矩阵X ,其中该矩阵中存储训练数据,每一行为一条训练数据
           返回:投影矩阵(按照维度的重要性排序)、方差和均值"""
        # 获取维数
        num_data,dim = X.shape
        # 数据中心化
        mean_X = X.mean(axis=0)
        X = X - mean_X
        if dim<num_data:
            # PCA- 使用紧致技巧
            M = dot(X,X.T)
            # 协方差矩阵
            e,EV = linalg.eigh(M)
            # 特征值和特征向量
            tmp = dot(X.T,EV).T
            # 这就是紧致技巧
            V = tmp[::-1]
            # 由于最后的特征向量是我们所需要的,所以需要将其逆转
            S = sqrt(e)[::-1]
            # 由于特征值是按照递增顺序排列的,所以需要将其逆转
            for i in range(V.shape[1]):
                V[:,i] /= S
        else:
            # PCA- 使用SVD 方法
            U,S,V = linalg.svd(X)
            V = V[:num_data]
            # 仅仅返回前nun_data 维的数据才合理
            #  返回投影矩阵、方差和均值
        return V,S,mean_X
    
    def denoise(im,U_init,tolerance=0.1,tau=0.125,tv_weight=100):
        """ 使用A. Chambolle(2005)在公式(11)中的计算步骤实现Rudin-Osher-Fatemi(ROF)去噪模型
           输入:含有噪声的输入图像(灰度图像)、U 的初始值、TV 正则项权值、步长、停业条件
            输出:去噪和去除纹理后的图像、纹理残留"""
        m,n = im.shape # 噪声图像的大小
    
        #  初始化
        U = U_init
        Px = im # 对偶域的x 分量
        Py = im # 对偶域的y 分量
        error = 1
        while (error > tolerance):
            Uold = U
    
            # 原始变量的梯度
            GradUx = roll(U,-1,axis=1)-U # 变量U 梯度的x 分量
            GradUy = roll(U,-1,axis=0)-U # 变量U 梯度的y 分量
    
            #  更新对偶变量
            PxNew = Px + (tau/tv_weight)*GradUx
            PyNew = Py + (tau/tv_weight)*GradUy
            NormNew = maximum(1,sqrt(PxNew**2+PyNew**2))
            Px = PxNew/NormNew # 更新x 分量(对偶)
            Py = PyNew/NormNew # 更新y 分量(对偶)
            #  更新原始变量
            RxPx = roll(Px,1,axis=1) # 对x 分量进行向右x 轴平移
            RyPy = roll(Py,1,axis=0) # 对y 分量进行向右y 轴平移
    
            DivP = (Px-RxPx)+(Py-RyPy) # 对偶域的散度
            U = im + tv_weight*DivP # 更新原始变量
    
            #  更新误差
            error = linalg.norm(U-Uold)/sqrt(n*m);
        return U,im-U  # 去噪后的图像和纹理残余
    
    
    
    
    image_list = get_imlist("G:\\最后两种\\")
    
    index=6858
    for image_address in image_list:
        index = index + 1
        dealIndex=0
        for x in range(1,17):
            image = Image.open(image_address)
            imageArray = array(image)
            dealIndex+=1
            if x==1:
                # 反相处理
                imageArray = 255 - imageArray
                print("第"+str(index)+"张 反向处理")
            elif x==2:
                # 将图像像素值变换到100...200 区间
                imageArray = (100.0 / 255) * imageArray + 100
                print("第" + str(index) + "张 像素值变换")
            elif x==3:
                # 对图像像素值求平方后得到的图像
                imageArray = 255.0 * (imageArray / 255.0) ** 2
                print("第" + str(index) + "张 像素值求平方")
            elif x==4:
                # 图像旋转
                image = image.rotate(random.randint(0,360))
                imageArray=array(image)
                print("第" + str(index) + "张 图像旋转")
            elif x==5:
                # 直方图均衡化
                imageArray,cdf=histeq(imageArray)
                print("第" + str(index) + "张 直方图均衡化")
            elif x==6:
                # gaussian滤波
                imageArray = filters.gaussian_filter(imageArray, 5)
                print("第" + str(index) + "张 gaussian滤波")
            elif x==7:
                # Sobel 导数滤波器
                imx = zeros(imageArray.shape)
                filters.sobel(imageArray, 1, imx)
                imy = zeros(imageArray.shape)
                filters.sobel(imageArray, 0, imy)
                magnitude = sqrt(imx ** 2 + imy ** 2)
                imageArray=magnitude
                print("第" + str(index) + "张  Sobel导数滤波器")
            elif x==8:
                # 噪声
                imageArray = imageArray + 30 * random.standard_normal(imageArray.shape)
                print("第" + str(index) + "张  噪声")
            elif x==9:
                # 反相处理+像素值变换
                imageArray = 255 - imageArray
                imageArray = (100.0 / 255) * imageArray + 100
                print("第" + str(index) + "张  反相处理+像素值变换")
            elif x==10:
                # 反相处理+像素值求平方
                imageArray = 255 - imageArray
                imageArray = 255.0 * (imageArray / 255.0) ** 2
                print("第" + str(index) + "张  反相处理+像素值求平方")
            elif x==11:
                # 像素值求平方+反相处理
                imageArray = 255.0 * (imageArray / 255.0) ** 2
                imageArray = 255 - imageArray
                print("第" + str(index) + "张  像素值求平方+反相处理")
            elif x==12:
                # 像素值变换+像素值求平方
                imageArray = (100.0 / 255) * imageArray + 100
                imageArray = 255.0 * (imageArray / 255.0) ** 2
                print("第" + str(index) + "张  像素值变换+像素值求平方")
            elif x==13:
                # 图像旋转+反相
                image = image.rotate(random.randint(0, 360))
                imageArray = array(image)
                imageArray = 255 - imageArray
                print("第" + str(index) + "张  图像旋转+反相")
            elif x==14:
                # 图像旋转+噪声
                image = image.rotate(random.randint(0, 360))
                imageArray = array(image)
                imageArray = imageArray + 30 * random.standard_normal(imageArray.shape)
                print("第" + str(index) + "张  图像旋转+噪声")
            elif x==15:
                # 噪声+直方图均衡化
                imageArray = imageArray + 30 * random.standard_normal(imageArray.shape)
                imageArray, cdf = histeq(imageArray)
                print("第" + str(index) + "张  噪声+直方图均衡化")
    
    
            imageArray = uint8(imageArray)
            image=Image.fromarray(imageArray)
            image = image.convert('RGB')
            if image_address.rfind("不规则")!= -1:
                image.save("G:\\兔屎图片_二次处理\\不规则\\" + str(index)+"_"+str(dealIndex) + ".jpg")
            elif image_address.rfind("大小不一") != -1:
                image.save("G:\\兔屎图片_二次处理\\大小不一\\" + str(index) +"_"+str(dealIndex)+ ".jpg")
            elif image_address.rfind("拉稀") != -1:
                image.save("G:\\兔屎图片_二次处理\\拉稀\\" + str(index) +"_"+str(dealIndex)+ ".jpg")
            elif image_address.rfind("正常") != -1:
                image.save("G:\\兔屎图片_二次处理\\正常\\" + str(index) +"_"+str(dealIndex)+ ".jpg")
    
            print("完事一个")

    参考文章:https://www.cnblogs.com/xk-bench/p/7825290.html

    展开全文
  • Python做图像处理

    万次阅读 多人点赞 2008-01-18 12:11:00
    Python做图像处理 最近在做一件比较 evil 的事情——验证码识别,以此来学习一些新的技能。因为我是初学,对图像处理方面就不太了解了,欲要利吾事,必先利吾器,既然只是做一下实验,那用 Python 来作原型开发再...
    用Python做图像处理
    id="alimamaifrm" style="WIDTH: 750px; HEIGHT: 110px" border="0" name="alimamaifrm" marginwidth="0" marginheight="0" src="http://p.alimama.com/cpacode.php?t=A&pid=mm_10108440_0_0&w=750&h=110&rn=1&cn=3&ky=&cid=251602&bgc=FFFFFF&bdc=E6E6E6&tc=0000FF&dc=000000" frameborder="0" width="750" scrolling="no" height="110">
           最近在做一件比较 evil 的事情——验证码识别,以此来学习一些新的技能。因为我是初学,对图像处理方面就不太了解了,欲要利吾事,必先利吾器,既然只是做一下实验,那用 Python 来作原型开发再好不过了。在 Python 中,比较常用的图像处理库是 PIL(Python Image Library),当前版本是 1.1.6 ,用起来非常方便。大家可以在 http://www.pythonware.com/products/pil/index.htm 下载和学习。
           在这里,我主要是介绍一下做图像识别时可能会用到的一些 PIL 提供的功能,比如图像增强、还有滤波之类的。最后给出使用 Python 做图像处理与识别的优势与劣势。
    基本图像处理
           使用 PIL 之前需要 import Image 模块:
    import Image
           然后你就可以使用Image.open(‘xx.bmp’) 来打开一个位图文件进行处理了。打开文件你不用担心格式,也不用了解格式,无论什么格式,都只要把文件名丢给 Image.open 就可以了。真所谓 bmp、jpg、png、gif……,一个都不能少。
    img = Image.open(‘origin.png’)    # 得到一个图像的实例对象 img
    1原图
           图像处理中,最基本的就是色彩空间的转换。一般而言,我们的图像都是 RGB 色彩空间的,但在图像识别当中,我们可能需要转换图像到灰度图、二值图等不同的色彩空间。 PIL 在这方面也提供了极完备的支持,我们可以:
    new_img = img.convert(‘L’)
    把 img 转换为 256 级灰度图像, convert() 是图像实例对象的一个方法,接受一个 mode 参数,用以指定一种色彩模式,mode 的取值可以是如下几种:
    · 1 (1-bit pixels, black and white, stored with one pixel per byte)
    · L (8-bit pixels, black and white)
    · P (8-bit pixels, mapped to any other mode using a colour palette)
    · RGB (3x8-bit pixels, true colour)
    · RGBA (4x8-bit pixels, true colour with transparency mask)
    · CMYK (4x8-bit pixels, colour separation)
    · YCbCr (3x8-bit pixels, colour video format)
    · I (32-bit signed integer pixels)
    · F (32-bit floating point pixels)
    怎么样,够丰富吧?其实如此之处,PIL 还有限制地支持以下几种比较少见的色彩模式:LA (L with alpha), RGBX (true colour with padding) and RGBa (true colour with premultiplied alpha)。
    下面看一下 mode 为 ‘1’、’L’、’P’时转换出来的图像:
    2 mode = '1'
    3 mode = 'L'
    4 mode = 'P'
    convert() 函数也接受另一个隐含参数 matrix,转换矩阵 matrix 是一个长度为4 或者16 tuple。下例是一个转换 RGB 空间到 CIE XYZ 空间的例子:
        rgb2xyz = (
            0.412453, 0.357580, 0.180423, 0,
            0.212671, 0.715160, 0.072169, 0,
            0.019334, 0.119193, 0.950227, 0 )
        out = im.convert("RGB", rgb2xyz)
           除了完备的色彩空间转换能力外, PIL 还提供了resize()、rotate()等函数以获得改变大小,旋转图片等几何变换能力,在图像识别方面,图像实例提供了一个 histogram() 方法来计算直方图,非常方便实用。
    图像增强
           图像增强通常用以图像识别之前的预处理,适当的图像增强能够使得识别过程达到事半功倍的效果。 PIL 在这方面提供了一个名为 ImageEnhance 的模块,提供了几种常见的图像增强方案:
    import ImageEnhance
    enhancer = ImageEnhance.Sharpness(image)
    for i in range(8):
        factor = i / 4.0
        enhancer.enhance(factor).show("Sharpness %f" % factor)
    上面的代码即是一个典型的使用 ImageEnhance 模块的例子。 Sharpness 是 ImageEnhance 模块的一个类,用以锐化图片。这一模块主要包含如下几个类:Color、Brightness、Contrast和Sharpness。它们都有一个共同的接口 .enhance(factor) ,接受一个浮点参数 factor,标示增强的比例。下面看看这四个类在不同的 factor 下的效果
    5 使用Color 进行色彩增强,factor 取值 [0, 4],步进 0.5
    6 用 Birghtness 增强亮度,factor取值[0,4],步进0.5
    7用 Contrast 增强对比度, factor 取值 [0,4],步进0.5
    8用 Sharpness 锐化图像,factor取值 [0,4],步进0.5
    图像 Filter
           PIL 在 Filter 方面的支持是非常完备的,除常见的模糊、浮雕、轮廓、边缘增强和平滑,还有中值滤波、ModeFilter等,简直方便到可以做自己做一个Photoshop。这些 Filter 都放置在 ImageFilter 模块中,ImageFilter主要包括两部分内容,一是内置的 Filter,如 BLUR、DETAIL等,另一部分是 Filter 函数,可以指定不同的参数获得不同的效果。示例如下:
    import ImageFilter
    im1 = im.filter(ImageFilter.BLUR)
    im2 = im.filter(ImageFilter.MinFilter(3))
    im3 = im.filter(ImageFilter.MinFilter()) # same as MinFilter(3)
    可以看到 ImageFilter 模块的使用非常简单,每一个 Filter 都只需要一行代码就可调用,开发效率非常高。
     
    9使用 BLUR
    10使用 CONTOUR
    11使用 DETAIL
    12使用 EMBOSS
    13使用 EDGE_ENHANCE
    14使用 EDGE_ENHANCE_MORE
    15使用 FIND_EDGES
    16使用 SHARPEN
    17使用 SMOOTH
    18使用 SMOOTH_MORE
           以上是几种内置的 Filter 的效果图,除此之外, ImageFilter 还提供了一些 Filter 函数,下面我们来看看这些可以通过参数改变行为的 Filter 的效果:
    19使用 Kernel(),参数:size = (3, 3), kernel = (0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5)
    20使用 MaxFilter,默认参数
    21使用 MinFilter,默认参数
    22使用 MedianFilter,默认参数
    23使用 ModeFilter,参数 size = 3
    24使用 RankFilter,参数 size = 3, rank = 3
    小结
           到此,对 PIL 的介绍就告一段落了。总的来说,对于图像处理和识别,PIL 内建了强大的支持,从各种增强算法到 Filter ,都让人无法怀疑使用 Python 的可行性。 Python唯一的劣势在于执行时间过慢,特别是当实现一些计算量大的算法时候,需要极强的耐心。我曾用 Hough Transform(霍夫变换)来查找图像中的直线,纯 Python 的实现处理一个 340 * 100 的图片也要花去数秒时间(P4 3.0G + 1G memory)。但使用 PIL 无需关注图像格式、内建的图像增强算法和 Filter 算法,这些优点使 Python 适合用于构造原型和进行实验,在这两方面Python 比 matlab 更加方便。商业的图像识别产品开发,可以考虑已经被 boost accepted的来自 adobe 的开源 C++ 库 gil,可以兼顾执行性能和开发效率。
    id="alimamaifrm" style="WIDTH: 750px; HEIGHT: 110px" border="0" name="alimamaifrm" marginwidth="0" marginheight="0" src="http://p.alimama.com/cpacode.php?t=A&pid=mm_10108440_0_0&w=750&h=110&rn=1&cn=3&ky=%CA%E9&cid=50000072&bgc=FFFFFF&bdc=E6E6E6&tc=0000FF&dc=000000" frameborder="0" width="750" scrolling="no" height="110">
    展开全文
  • Python做图像处理(PIL库的使用)

    千次阅读 2016-10-19 16:12:14
    Python做图像处理  最近在做一件比较 evil 的事情——验证码识别,以此来学习一些新的技能。因为我是初学,对图像处理方面就不太了解了,欲要利吾事,必先利吾器,既然只是做一下实验,那用 Python 来作原型...
    用Python做图像处理
    id="alimamaifrm" border="0" name="alimamaifrm" marginwidth="0" marginheight="0" src="http://p.alimama.com/cpacode.php?t=A&pid=mm_10108440_0_0&w=750&h=110&rn=1&cn=3&ky=&cid=251602&bgc=FFFFFF&bdc=E6E6E6&tc=0000FF&dc=000000" frameborder="0" width="750" scrolling="no" height="110" style="color: rgb(54, 46, 43); font-family: Arial; font-size: 14px; line-height: 26px; width: 750px; height: 110px;">
           最近在做一件比较 evil 的事情——验证码识别,以此来学习一些新的技能。因为我是初学,对图像处理方面就不太了解了,欲要利吾事,必先利吾器,既然只是做一下实验,那用 Python 来作原型开发再好不过了。在 Python 中,比较常用的图像处理库是 PIL(Python Image Library),当前版本是 1.1.6 ,用起来非常方便。大家可以在 http://www.pythonware.com/products/pil/index.htm 下载和学习。
           在这里,我主要是介绍一下做图像识别时可能会用到的一些 PIL 提供的功能,比如图像增强、还有滤波之类的。最后给出使用 Python 做图像处理与识别的优势与劣势。
    基本图像处理
           使用 PIL 之前需要 import Image 模块:
    import Image
           然后你就可以使用Image.open(‘xx.bmp’) 来打开一个位图文件进行处理了。打开文件你不用担心格式,也不用了解格式,无论什么格式,都只要把文件名丢给 Image.open 就可以了。真所谓 bmp、jpg、png、gif……,一个都不能少。
    img = Image.open(‘origin.png’)    # 得到一个图像的实例对象 img
    图 1原图
           图像处理中,最基本的就是色彩空间的转换。一般而言,我们的图像都是 RGB 色彩空间的,但在图像识别当中,我们可能需要转换图像到灰度图、二值图等不同的色彩空间。 PIL 在这方面也提供了极完备的支持,我们可以:
    new_img = img.convert(‘L’)
    把 img 转换为 256 级灰度图像, convert() 是图像实例对象的一个方法,接受一个 mode 参数,用以指定一种色彩模式,mode 的取值可以是如下几种:
    · 1 (1-bit pixels, black and white, stored with one pixel per byte)
    · L (8-bit pixels, black and white)
    · P (8-bit pixels, mapped to any other mode using a colour palette)
    · RGB (3x8-bit pixels, true colour)
    · RGBA (4x8-bit pixels, true colour with transparency mask)
    · CMYK (4x8-bit pixels, colour separation)
    · YCbCr (3x8-bit pixels, colour video format)
    · I (32-bit signed integer pixels)
    · F (32-bit floating point pixels)
    怎么样,够丰富吧?其实如此之处,PIL 还有限制地支持以下几种比较少见的色彩模式:LA (L with alpha), RGBX (true colour with padding) and RGBa (true colour with premultiplied alpha)。
    下面看一下 mode 为 ‘1’、’L’、’P’时转换出来的图像:
    图 2 mode = '1'
    图 3 mode = 'L'
    图 4 mode = 'P'
    convert() 函数也接受另一个隐含参数 matrix,转换矩阵 matrix 是一个长度为4 或者16 tuple。下例是一个转换 RGB 空间到 CIE XYZ 空间的例子:
        rgb2xyz = (
            0.412453, 0.357580, 0.180423, 0,
            0.212671, 0.715160, 0.072169, 0,
            0.019334, 0.119193, 0.950227, 0 )
        out = im.convert("RGB", rgb2xyz)
           除了完备的色彩空间转换能力外, PIL 还提供了resize()、rotate()等函数以获得改变大小,旋转图片等几何变换能力,在图像识别方面,图像实例提供了一个 histogram() 方法来计算直方图,非常方便实用。
    图像增强
           图像增强通常用以图像识别之前的预处理,适当的图像增强能够使得识别过程达到事半功倍的效果。 PIL 在这方面提供了一个名为 ImageEnhance 的模块,提供了几种常见的图像增强方案:
    import ImageEnhance
    enhancer = ImageEnhance.Sharpness(image)
    for i in range(8):
        factor = i / 4.0
        enhancer.enhance(factor).show("Sharpness %f" % factor)
    上面的代码即是一个典型的使用 ImageEnhance 模块的例子。 Sharpness 是 ImageEnhance 模块的一个类,用以锐化图片。这一模块主要包含如下几个类:Color、Brightness、Contrast和Sharpness。它们都有一个共同的接口 .enhance(factor) ,接受一个浮点参数 factor,标示增强的比例。下面看看这四个类在不同的 factor 下的效果
    图 5 使用Color 进行色彩增强,factor 取值 [0, 4],步进 0.5
    图 6 用 Birghtness 增强亮度,factor取值[0,4],步进0.5
    图 7用 Contrast 增强对比度, factor 取值 [0,4],步进0.5
    图 8用 Sharpness 锐化图像,factor取值 [0,4],步进0.5
    图像 Filter
           PIL 在 Filter 方面的支持是非常完备的,除常见的模糊、浮雕、轮廓、边缘增强和平滑,还有中值滤波、ModeFilter等,简直方便到可以做自己做一个Photoshop。这些 Filter 都放置在 ImageFilter 模块中,ImageFilter主要包括两部分内容,一是内置的 Filter,如 BLUR、DETAIL等,另一部分是 Filter 函数,可以指定不同的参数获得不同的效果。示例如下:
    import ImageFilter
    im1 = im.filter(ImageFilter.BLUR)
    im2 = im.filter(ImageFilter.MinFilter(3))
    im3 = im.filter(ImageFilter.MinFilter()) # same as MinFilter(3)
    可以看到 ImageFilter 模块的使用非常简单,每一个 Filter 都只需要一行代码就可调用,开发效率非常高。
     
    图 9使用 BLUR
    图 10使用 CONTOUR
    图 11使用 DETAIL
    图 12使用 EMBOSS
    图 13使用 EDGE_ENHANCE
    图 14使用 EDGE_ENHANCE_MORE
    图 15使用 FIND_EDGES
    图 16使用 SHARPEN
    图 17使用 SMOOTH
    图 18使用 SMOOTH_MORE
           以上是几种内置的 Filter 的效果图,除此之外, ImageFilter 还提供了一些 Filter 函数,下面我们来看看这些可以通过参数改变行为的 Filter 的效果:
    图 19使用 Kernel(),参数:size = (3, 3), kernel = (0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5)
    图 20使用 MaxFilter,默认参数
    图 21使用 MinFilter,默认参数
    图 22使用 MedianFilter,默认参数
    图 23使用 ModeFilter,参数 size = 3
    图 24使用 RankFilter,参数 size = 3, rank = 3
    小结
           到此,对 PIL 的介绍就告一段落了。总的来说,对于图像处理和识别,PIL 内建了强大的支持,从各种增强算法到 Filter ,都让人无法怀疑使用 Python 的可行性。 Python唯一的劣势在于执行时间过慢,特别是当实现一些计算量大的算法时候,需要极强的耐心。我曾用 Hough Transform(霍夫变换)来查找图像中的直线,纯 Python 的实现处理一个 340 * 100 的图片也要花去数秒时间(P4 3.0G + 1G memory)。但使用 PIL 无需关注图像格式、内建的图像增强算法和 Filter 算法,这些优点使 Python 适合用于构造原型和进行实验,在这两方面Python 比 matlab 更加方便。商业的图像识别产品开发,可以考虑已经被 boost accepted的来自 adobe 的开源 C++ 库 gil,可以兼顾执行性能和开发效率。
    展开全文
  • Python做图像识别和应用

    千次阅读 2017-05-11 15:53:54
    Python做图像处理  最近在做一件比较 evil 的事情——验证码识别,以此来学习一些新的技能。因为我是初学,对图像处理方面就不太了解了,欲要利吾事,必先利吾器,既然只是做一下实验,那用 Python 来作原型...
    用Python做图像处理
           最近在做一件比较 evil 的事情——验证码识别,以此来学习一些新的技能。因为我是初学,对图像处理方面就不太了解了,欲要利吾事,必先利吾器,既然只是做一下实验,那用 Python 来作原型开发再好不过了。在 Python 中,比较常用的图像处理库是 PIL(Python Image Library),当前版本是 1.1.6 ,用起来非常方便。大家可以在 http://www.pythonware.com/products/pil/index.htm 下载和学习。
           在这里,我主要是介绍一下做图像识别时可能会用到的一些 PIL 提供的功能,比如图像增强、还有滤波之类的。最后给出使用 Python 做图像处理与识别的优势与劣势。
    基本图像处理
           使用 PIL 之前需要 import Image 模块:
    import Image
           然后你就可以使用Image.open(‘xx.bmp’) 来打开一个位图文件进行处理了。打开文件你不用担心格式,也不用了解格式,无论什么格式,都只要把文件名丢给 Image.open 就可以了。真所谓 bmp、jpg、png、gif……,一个都不能少。
    img = Image.open(‘origin.png’)    # 得到一个图像的实例对象 img
    图 1原图
           图像处理中,最基本的就是色彩空间的转换。一般而言,我们的图像都是 RGB 色彩空间的,但在图像识别当中,我们可能需要转换图像到灰度图、二值图等不同的色彩空间。 PIL 在这方面也提供了极完备的支持,我们可以:
    new_img = img.convert(‘L’)
    把 img 转换为 256 级灰度图像, convert() 是图像实例对象的一个方法,接受一个 mode 参数,用以指定一种色彩模式,mode 的取值可以是如下几种:
    · 1 (1-bit pixels, black and white, stored with one pixel per byte)
    · L (8-bit pixels, black and white)
    · P (8-bit pixels, mapped to any other mode using a colour palette)
    · RGB (3x8-bit pixels, true colour)
    · RGBA (4x8-bit pixels, true colour with transparency mask)
    · CMYK (4x8-bit pixels, colour separation)
    · YCbCr (3x8-bit pixels, colour video format)
    · I (32-bit signed integer pixels)
    · F (32-bit floating point pixels)
    怎么样,够丰富吧?其实如此之处,PIL 还有限制地支持以下几种比较少见的色彩模式:LA (L with alpha), RGBX (true colour with padding) and RGBa (true colour with premultiplied alpha)。
    下面看一下 mode 为 ‘1’、’L’、’P’时转换出来的图像:
    图 2 mode = '1'
    图 3 mode = 'L'
    图 4 mode = 'P'
    convert() 函数也接受另一个隐含参数 matrix,转换矩阵 matrix 是一个长度为4 或者16 tuple。下例是一个转换 RGB 空间到 CIE XYZ 空间的例子:
        rgb2xyz = (
            0.412453, 0.357580, 0.180423, 0,
            0.212671, 0.715160, 0.072169, 0,
            0.019334, 0.119193, 0.950227, 0 )
        out = im.convert("RGB", rgb2xyz)
           除了完备的色彩空间转换能力外, PIL 还提供了resize()、rotate()等函数以获得改变大小,旋转图片等几何变换能力,在图像识别方面,图像实例提供了一个 histogram() 方法来计算直方图,非常方便实用。
    图像增强
           图像增强通常用以图像识别之前的预处理,适当的图像增强能够使得识别过程达到事半功倍的效果。 PIL 在这方面提供了一个名为 ImageEnhance 的模块,提供了几种常见的图像增强方案:
    import ImageEnhance
    enhancer = ImageEnhance.Sharpness(image)
    for i in range(8):
        factor = i / 4.0
        enhancer.enhance(factor).show("Sharpness %f" % factor)
    上面的代码即是一个典型的使用 ImageEnhance 模块的例子。 Sharpness 是 ImageEnhance 模块的一个类,用以锐化图片。这一模块主要包含如下几个类:Color、Brightness、Contrast和Sharpness。它们都有一个共同的接口 .enhance(factor) ,接受一个浮点参数 factor,标示增强的比例。下面看看这四个类在不同的 factor 下的效果
    图 5 使用Color 进行色彩增强,factor 取值 [0, 4],步进 0.5
    图 6 用 Birghtness 增强亮度,factor取值[0,4],步进0.5
    图 7用 Contrast 增强对比度, factor 取值 [0,4],步进0.5
    图 8用 Sharpness 锐化图像,factor取值 [0,4],步进0.5
    图像 Filter
           PIL 在 Filter 方面的支持是非常完备的,除常见的模糊、浮雕、轮廓、边缘增强和平滑,还有中值滤波、ModeFilter等,简直方便到可以做自己做一个Photoshop。这些 Filter 都放置在 ImageFilter 模块中,ImageFilter主要包括两部分内容,一是内置的 Filter,如 BLUR、DETAIL等,另一部分是 Filter 函数,可以指定不同的参数获得不同的效果。示例如下:
    import ImageFilter
    im1 = im.filter(ImageFilter.BLUR)
    im2 = im.filter(ImageFilter.MinFilter(3))
    im3 = im.filter(ImageFilter.MinFilter()) # same as MinFilter(3)
    可以看到 ImageFilter 模块的使用非常简单,每一个 Filter 都只需要一行代码就可调用,开发效率非常高。
     
    图 9使用 BLUR
    图 10使用 CONTOUR
    图 11使用 DETAIL
    图 12使用 EMBOSS
    图 13使用 EDGE_ENHANCE
    图 14使用 EDGE_ENHANCE_MORE
    图 15使用 FIND_EDGES
    图 16使用 SHARPEN
    图 17使用 SMOOTH
    图 18使用 SMOOTH_MORE
           以上是几种内置的 Filter 的效果图,除此之外, ImageFilter 还提供了一些 Filter 函数,下面我们来看看这些可以通过参数改变行为的 Filter 的效果:
    图 19使用 Kernel(),参数:size = (3, 3), kernel = (0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5)
    图 20使用 MaxFilter,默认参数
    图 21使用 MinFilter,默认参数
    图 22使用 MedianFilter,默认参数
    图 23使用 ModeFilter,参数 size = 3
    图 24使用 RankFilter,参数 size = 3, rank = 3
    小结

           到此,对 PIL 的介绍就告一段落了。总的来说,对于图像处理和识别,PIL 内建了强大的支持,从各种增强算法到 Filter ,都让人无法怀疑使用 Python 的可行性。 Python唯一的劣势在于执行时间过慢,特别是当实现一些计算量大的算法时候,需要极强的耐心。我曾用 Hough Transform(霍夫变换)来查找图像中的直线,纯 Python 的实现处理一个 340 * 100 的图片也要花去数秒时间(P4 3.0G + 1G memory)。但使用 PIL 无需关注图像格式、内建的图像增强算法和 Filter 算法,这些优点使 Python 适合用于构造原型和进行实验,在这两方面Python 比 matlab 更加方便。商业的图像识别产品开发,可以考虑已经被 boost accepted的来自 adobe 的开源 C++ 库 gil,可以兼顾执行性能和开发效率。





    请参考:http://blog.csdn.net/gzlaiyonghao/article/details/1852726#comments






    展开全文
  • 建议你下载左边的Python3.X版本而不是Python2.X版本 因为2和3版本的语法是有差异的,而且版本更新肯定是在优化啦 Python2.X版本将在 2020年4月12日 退休。退休后将不再进行任何维护。 图中根据你的计算机选择是64位...
  • Python进行图像处理

    千次阅读 2012-11-30 20:46:59
    虽然图像处理的最佳工具是MATLAB的图像处理工具箱,但是在进行一些“简单的”图像处理任务或者大批量的简单图像处理任务的时候,Python更有优势。 关键词:图像处理 图像增强 Python Abstract:This context ...
  • 导读:数量庞大的图像和视频充斥着我们的生活。我们需要对图片进行检索、分类等操作时,利用人工手段显然是不现实的。于是,计算机视觉相关技术便应运而生,并且得到了快速的发展。本...
  •    直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法,其主要思想是将一副图像的直方图分布变成近似均匀分布,从而增强图像的对比度。这种方法通常用来增加许多图像的全局对比度,尤其是当图像...
  • 欢迎大家关注微信公众号:baihuaML,白话机器学习。 码字不易,如转载请私信我!! 在这里,我们一起分享AI的故事。...在使用python进行编程时,涉及到多个不同的图像处理库的选择,今天我们简单聊一聊...
  • python图像处理较为全面

    万次阅读 2018-06-28 19:08:01
    第 1 章 基本的图像操作和处理本章讲解操作和处理图像的基础知识,将通过大量...1.1 PIL:Python图像处理类库PIL(Python Imaging Library Python图像处理类库)提供了通用的图像处理功能,以及大量有用的基本图...
  • Python 图像处理详解

    千次阅读 2013-01-22 18:10:58
    Python做图像处理  最近在做一件比较 evil 的事情——验证码识别,以此来学习一些新的技能。因为我是初学,对图像处理方面就不太了解了,欲要利吾事,必先利吾器,既然只是做一下实验,那用 Python 来作原型...
  • python】numpy矩阵相减的一个大坑!

    千次阅读 2020-03-05 09:59:52
    最近用python做图像处理的时候发现numpy库矩阵相减的一个大坑! 当np.uint8类型矩阵相减时,会发生严重的错误: def main(): # 读取图片 image0 = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.uint8) image1 = np...
  • python数字图像处理

    千次阅读 2018-09-12 20:03:41
    这里博客是自己的个系统整理,主要说的是python在数字图像处理方面的应用,主要用到的库有PIL和skimage PIL库 1、用python简单处理图片:打开、显示、保存图像 2、用python简单处理图片:图像通道、几何变换...
  • Python 图像处理第三方库

    千次阅读 2017-06-30 09:55:16
    一般情况下,opencv是图像处理比较理想的选择,但是在一定情况下,安装opencv是需要花费一点时间和力气,但是这个库的确很强大(虽然并没有完全长期使用这个库,但是在各个系统上都安装过,编译过,一个比较好的途径...
  • Python中最常用的十大图像处理

    千次阅读 2019-11-01 09:33:00
    图像处理是分析和操纵数字图像的过程,旨在提高其质量或从中提取一些信息,然后将其用于某些方面。 图像处理中的常见任务包括显示图像,基本操作(如裁剪、翻转、旋转等),图像分割,分类和特征提取,图像恢复和...
  • 说明1:现在网上很多关于python+opencv配置教程,但是很多都让人感觉想砸屏幕,原因自己想去吧,呵呵。 说明2:安装路径尽量不要有中文,因为国外的软件有些是不支持中文的 一、安装python 首先要明确python有两...
  • 该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。...
  • Python: 图像处理的基本运算

    千次阅读 2016-10-16 19:41:18
    本文主要介绍 Python 在图像处理中的基本运算,借助 scikit-image 库,Python做图像处理的 时候非常方便,对于习惯用MATLAB的人来说,可以非常快速的习惯Python的语法。 熟悉了这些 基本的运算,就可以做进一步...
1 2 3 4 5 ... 20
收藏数 69,380
精华内容 27,752
关键字:

python怎么做图像处理