基本的图像处理操作

磐创AI

    Python中的图像处理基础
    图像处理是一种对图像执行操作以从中提取信息或增强图像的方法。图像处理是当今计算机视觉中最热门的话题之一,因为它被认为是计算机视觉、OCR 和其他相机相关领域的基础。
    让我们开始实际处理图像。
    提示
    只是在这里向你展示一个代码片段,但在本文的末尾,提供了的git 存储库,你可以在其中找到此文中的所有代码。你可以直接复制粘贴!
    让我们开始吧!
    如何读取图像?
    你可以通过 3 种类型读取图像。
    1. 使用 open-cv
    OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。OpenCV 旨在为计算机视觉应用程序提供通用基础架构,并加速机器感知在商业产品中的使用。
    这是读取图像的最常用方法。
    import cv2
    #read image by opencv
    img_1 = cv2.imread(r"C:UsersChinmayBDownloadspexels-photo-8115603.jpeg")
    cv2.imshow("img",img_1)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    cv2 读取图像
    运行代码后,将打开一个单独的窗口,你将看到你的图像。
    · Waitley 代表你希望在屏幕上停留多长时间的时间。
    · destroyAllWindows() 是用于在时间结束后删除图像的命令。
    · 输出图像是数组的形式。
    2. Pillow 库
    PIL(Python Imaging Library)为 Python 添加了许多图像处理功能。Pillow 是 PIL 的一个分支,增加了一些用户友好的特性。
    # read image by PIL
    from PIL import Image
    # creating a object
    img = Image.open(r"C:UsersChinmayBDownloadspexels-photo-8115603.jpeg")
    img.show()
    type(img)
    输出:
    
    · 输出格式为JPG格式[PIL.JpegImagePlugin.JpegImageFile
    3. matplotlib库
    matplotlib 库中的图像模块用于在 Python 中处理图像。
    #read image by matplotlib
    import matplotlib.pyplot as plt
    import matplotlib.image as mpimg
    from matplotlib.pyplot import figure
    figure(figsize=(4, 3), dpi=80)
    img = mpimg.imread(r'C:UsersChinmayBDownloadspexels-photo-8115603.jpeg')
    imgplot = plt.imshow(img)
    plt.show()
    输出:
    
    · 输出图像是数组的形式。
    使图像模糊
    1. 高斯模糊
    使图像模糊的最简单方法是使用高斯滤波器。高斯模糊只是一种借助高斯函数模糊图像的方法。模糊图像使边缘更牢固。
    #gaussian blurr
    import cv2
    img_1 = cv2.imread(r"C:UsersChinmayBDownloadspexels-photo-8115603.jpeg")
    blur = cv2.blur(img_1,(5,5))
    cv2.imshow("img",blur)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    2. 内核模糊
    你可以自定义模糊率和其他内容。
    #Kernel blurr
    import numpy as np
    kernel = np.ones((5,5),np.float32)/25
    dst = cv2.filter2D(img_1,-1,kernel)
    cv2.imshow("img",dst)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    3. 中值模糊
    ##median blurr
    img_1 = cv2.imread(r"C:UsersChinmayBDownloadspexels-photo-8115603.jpeg")
    median = cv2.medianBlur(img_1,17)
    cv2.imshow("img",median)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    · 这些是你可以使图像模糊并更改模糊强度的方法。
    将图像转换为黑白
    · 我们以 RGB 三种颜色读取图像。很多时候我们想使用它的基础版本,比如黑白。
    ######converting image into black and white
    import cv2
      
    img_1 = cv2.imread(r"C:UsersChinmayBDownloadspexels-photo-8115603.jpeg")
    grayImage = cv2.cvtColor(img_1, cv2.COLOR_BGR2GRAY)
    (thresh, blackAndWhiteImage) = cv2.threshold(grayImage, 127, 255, cv2.THRESH_BINARY)
    # cv2.imshow('Black white image', blackAndWhiteImage)
    cv2.imshow('Gray image', grayImage)
      
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    · 你可以通过上面的代码改变灰度的强度。
    裁剪图像
    #Cropping Image
    img_1 = cv2.imread(r"C:UsersChinmayBDownloadspexels-photo-8115603.jpeg")
    x,y,c = img_1.shape
    new_img = img_1[50:580, 100:300]  
    cv2.imshow('Gray image', new_img)  
    cv2.waitKey(0)
    cv2.destroyAllWindows()  
    
    · 裁剪非常简单,因为你只需要提供从哪里开始和从哪里结束的坐标。
    · 你可以使用 cv2.imwrite 存储裁剪的图像以供进一步处理。
    编辑应用程序等对比效果
    · 对比度决定图像中阴影的数量。
    · 在图像特征的灰度基础上进行区分,使用对比度。
    ######contrast
    from PIL import Image, ImageEnhance
      
    # Opening Image
    im = Image.open(r"C:UsersChinmayBDownloadspexels-photo-8115603.jpeg")
      
    # Creating object of Contrast class
    im3 = ImageEnhance.Contrast(im)
      
    # showing resultant image
    im3.enhance(4.9).show()
    
    锐化图像
    · 很多时候,由于相机镜头没有对焦,图像会变得模糊。锐化效果锐化边缘以获得更好的外观。
    #sharpning an image
    import numpy as np
    import cv2
    img1 = cv2.imread(r'C:UsersChinmayBDownloadspexels-photo-8115603.jpeg',1)
    # Creating our sharpening filter
    filter = np.array([[-1, -1, -1], [-1, 9, -1], [-1, -1, -1]])
    # Applying cv2.filter2D function on our Cybertruck image
    sharpen_img_1=cv2.filter2D(img1,-1,filter)
    sharpen_img_1 = cv2. resize(sharpen_img_1, (960, 840))
    cv2.imshow("sharp",sharpen_img_1)
    cv2.waitKey(0)
    cv2.destroyAllWindows()  
    
    压纹滤镜
    import cv2
    img1 = cv2.imread(r'C:UsersChinmayBDownloadspexels-photo-8115603.jpeg',1)
    (b,g,r)=cv2.split(img1)
    r_new = r*0.393 + g*0.769 + b*0.189
    g_new = r*0.349 + g*0.686 + b*0.168
    b_new = r*0.272 + g*0.534 + b*0.131
    img_new=cv2.merge([b_new, g_new, r_new])
    cv2.imshow("img",img_new)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    小提示:内核中这些不同值的组合是生成你当前在 Instagram、Snapchat 和其他社交媒体上使用的许多滤镜的基础。
    以任意角度旋转图像
    · 通过这种简单的 cv2 方法,可以实现所有图像数据增强,如旋转、翻转、垂直和水平。
    # Creating our emboss filter
    img_1 = cv2.imread(r'C:UsersChinmayBDownloadspexels-photo-8115603.jpeg',1)
    filter = np.array([[0,1,0],[0,0,0],[0,-1,0]])
    # Applying cv2.filter2D function on our Cybertruck image
    emboss_img_1=cv2.filter2D(img_1,-1,filter)
    emboss_img_1=emboss_img_1+128
    emboss_img_1 = cv2. resize(emboss_img_1, (660, 640))
    cv2.imshow("dsnfj",emboss_img_1)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    
    
    缩小/调整图像大小
    · 对于更大尺寸的图像,数据要求更多。所以缩小有时可以提高它的可见性和功能。
    # import the Python Image
    # processing Library
    from PIL import Image
    # Giving The Original image Directory
    # Specified
    Original_Image = Image.open(r"C:UsersChinmayBDownloadspexels-photo-8115603.jpeg")
    # Rotate Image By 180 Degree
    rotated_image1 = Original_Image.rotate(180)
    # This is Alternative Syntax To Rotate
    # The Image
    rotated_image2 = Original_Image.transpose(Image.ROTATE_90)
    # This Will Rotate Image By 60 Degree
    rotated_image3 = Original_Image.rotate(60)
    rotated_image1.show()
    rotated_image2.show()
    rotated_image3.show()
    在图像上写文字
    水印或任何其他文本是图像中的重要因素之一。下面的程序将让你了解如何在图像上编写文本。
    ###shrink image
    img_1 = cv2.imread(r'C:UsersChinmayBDownloadspexels-photo-8115603.jpeg',1)
    img_shrinked = cv2.resize(img_1,(150, 150), interpolation = cv2.INTER_AREA)
    cv2.imshow('img',img_shrinked)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    这些是我觉得有趣的图像处理操作。这些所有操作都基于许多图像编辑应用程序。你可以通过结合所有技术来创建相同的应用程序。