• 基本的图像处理操作


    Python中的图像处理基础

    3a89351f6202bfcf02c578d22634acb1.jpeg

    图像处理是一种对图像执行操作以从中提取信息或增强图像的方法。图像处理是当今计算机视觉中最热门的话题之一,因为它被认为是计算机视觉、OCR 和其他相机相关领域的基础。

    让我们开始实际处理图像。

    提示

    只是在这里向你展示一个代码片段,但在本文的末尾,提供了的git 存储库,你可以在其中找到此文中的所有代码。你可以直接复制粘贴!

    让我们开始吧!

    如何读取图像?

    你可以通过 3 种类型读取图像。

    1. 使用 open-cv

    OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。OpenCV 旨在为计算机视觉应用程序提供通用基础架构,并加速机器感知在商业产品中的使用。

    这是读取图像的最常用方法。

    import cv2
    1. #read image by opencv
    2. img_1 = cv2.imread(r"C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg")
    3. cv2.imshow("img",img_1)
    4. cv2.waitKey(0)
    5. cv2.destroyAllWindows()

    cv2 读取图像

    运行代码后,将打开一个单独的窗口,你将看到你的图像。

    • Waitley 代表你希望在屏幕上停留多长时间的时间。

    • destroyAllWindows() 是用于在时间结束后删除图像的命令。

    • 输出图像是数组的形式。

    1. Pillow 库

    PIL(Python Imaging Library)为 Python 添加了许多图像处理功能。Pillow 是 PIL 的一个分支,增加了一些用户友好的特性。

    1. # read image by PIL
    2. from PIL import Image 
    3. # creating a object
    4. img = Image.open(r"C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg"
    5. img.show()
    6. type(img)

    输出:

    377acfd0c6b5c465748f63b7ff72f97d.png
    • 输出格式为JPG格式[PIL.JpegImagePlugin.JpegImageFile]

    1. matplotlib库

    matplotlib 库中的图像模块用于在 Python 中处理图像。

    1. #read image by matplotlib
    2. import matplotlib.pyplot as plt
    3. import matplotlib.image as mpimg
    4. from matplotlib.pyplot import figure
    5. figure(figsize=(43), dpi=80)
    6. img = mpimg.imread(r'C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg')
    7. imgplot = plt.imshow(img)
    8. plt.show()

    输出:

    d9453281f54927d7f2467519593dfa34.png
    • 输出图像是数组的形式。

    使图像模糊

    1. 高斯模糊

    使图像模糊的最简单方法是使用高斯滤波器。高斯模糊只是一种借助高斯函数模糊图像的方法。模糊图像使边缘更牢固。

    1. #gaussian blurr
    2. import cv2
    3. img_1 = cv2.imread(r"C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg")
    4. blur = cv2.blur(img_1,(5,5))
    5. cv2.imshow("img",blur)
    6. cv2.waitKey(0)
    7. cv2.destroyAllWindows()
    bdd34cda77c1cce20e7fe4f17358cfaa.png
    1. 内核模糊

    你可以自定义模糊率和其他内容。

    1. #Kernel blurr
    2. import numpy as np
    3. kernel = np.ones((5,5),np.float32)/25
    4. dst = cv2.filter2D(img_1,-1,kernel)
    5. cv2.imshow("img",dst)
    6. cv2.waitKey(0)
    7. cv2.destroyAllWindows()
    1. 中值模糊

    1. ##median blurr
    2. img_1 = cv2.imread(r"C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg")
    3. median = cv2.medianBlur(img_1,17)
    4. cv2.imshow("img",median)
    5. cv2.waitKey(0)
    6. cv2.destroyAllWindows()
    • 这些是你可以使图像模糊并更改模糊强度的方法。

    将图像转换为黑白

    • 我们以 RGB 三种颜色读取图像。很多时候我们想使用它的基础版本,比如黑白。

    1. ######converting image into black and white
    2. import cv2
    3.   
    4. img_1 = cv2.imread(r"C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg")
    5. grayImage = cv2.cvtColor(img_1, cv2.COLOR_BGR2GRAY)
    6. (thresh, blackAndWhiteImage) = cv2.threshold(grayImage, 127255, cv2.THRESH_BINARY)
    7. # cv2.imshow('Black white image', blackAndWhiteImage)
    8. cv2.imshow('Gray image', grayImage)
    9.   
    10. cv2.waitKey(0)
    11. cv2.destroyAllWindows()
    636d6d80d09124b74208f48690f71f41.png
    • 你可以通过上面的代码改变灰度的强度。

    裁剪图像

    1. #Cropping Image
    2. img_1 = cv2.imread(r"C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg")
    3. x,y,c = img_1.shape
    4. new_img = img_1[50:580100:300]  
    5. cv2.imshow('Gray image', new_img)  
    6. cv2.waitKey(0)
    7. cv2.destroyAllWindows()
    a6309afd5bcf11772417040eb2eb9f56.png
    • 裁剪非常简单,因为你只需要提供从哪里开始和从哪里结束的坐标。

    • 你可以使用 cv2.imwrite 存储裁剪的图像以供进一步处理。

    编辑应用程序等对比效果

    • 对比度决定图像中阴影的数量。

    • 在图像特征的灰度基础上进行区分,使用对比度。

    1. ######contrast 
    2. from PIL import Image, ImageEnhance
    3.   
    4. # Opening Image
    5. im = Image.open(r"C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg")
    6.   
    7. # Creating object of Contrast class
    8. im3 = ImageEnhance.Contrast(im)
    9.   
    10. # showing resultant image
    11. im3.enhance(4.9).show()
    9346ffba92e3065ed2fe421176d31552.png

    锐化图像

    • 很多时候,由于相机镜头没有对焦,图像会变得模糊。锐化效果锐化边缘以获得更好的外观。

    1. #sharpning an image 
    2. import numpy as np
    3. import cv2 
    4. img1 = cv2.imread(r'C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg',1)
    5. # Creating our sharpening filter
    6. filter = np.array([[-1-1-1], [-19-1], [-1-1-1]])
    7. # Applying cv2.filter2D function on our Cybertruck image
    8. sharpen_img_1=cv2.filter2D(img1,-1,filter)
    9. sharpen_img_1 = cv2. resize(sharpen_img_1, (960840))
    10. cv2.imshow("sharp",sharpen_img_1)
    11. cv2.waitKey(0)
    12. cv2.destroyAllWindows()
    06c13706e38210d126bf84792cd26696.png

    压纹滤镜

    1. import cv2
    2. img1 = cv2.imread(r'C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg',1)
    3. (b,g,r)=cv2.split(img1)
    4. r_new = r*0.393 + g*0.769 + b*0.189
    5. g_new = r*0.349 + g*0.686 + b*0.168
    6. b_new = r*0.272 + g*0.534 + b*0.131
    7. img_new=cv2.merge([b_new, g_new, r_new])
    8. cv2.imshow("img",img_new)
    9. cv2.waitKey(0)
    10. cv2.destroyAllWindows()
    b1b4fc8739fca2d30b049e7ace3d774a.png

    小提示:内核中这些不同值的组合是生成你当前在 Instagram、Snapchat 和其他社交媒体上使用的许多滤镜的基础。

    以任意角度旋转图像

    • 通过这种简单的 cv2 方法,可以实现所有图像数据增强,如旋转、翻转、垂直和水平。

    1. # Creating our emboss filter
    2. img_1 = cv2.imread(r'C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg',1)
    3. filter = np.array([[0,1,0],[0,0,0],[0,-1,0]])
    4. # Applying cv2.filter2D function on our Cybertruck image
    5. emboss_img_1=cv2.filter2D(img_1,-1,filter)
    6. emboss_img_1=emboss_img_1+128
    7. emboss_img_1 = cv2. resize(emboss_img_1, (660640))
    8. cv2.imshow("dsnfj",emboss_img_1)
    9. cv2.waitKey(0)
    10. cv2.destroyAllWindows()
    7aedd8baa97888deb7149532af71dffb.png 64fd08898079c924eebd755849eb5c1d.png 5847639bc2a5df463af529acae6106d5.png

    缩小/调整图像大小

    • 对于更大尺寸的图像,数据要求更多。所以缩小有时可以提高它的可见性和功能。

    1. import the Python Image
    2. # processing Library
    3. from PIL import Image
    4.  
    5. # Giving The Original image Directory
    6. # Specified
    7. Original_Image = Image.open(r"C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg")
    8.  
    9. # Rotate Image By 180 Degree
    10. rotated_image1 = Original_Image.rotate(180)
    11.  
    12. # This is Alternative Syntax To Rotate
    13. # The Image
    14. rotated_image2 = Original_Image.transpose(Image.ROTATE_90)
    15.  
    16. # This Will Rotate Image By 60 Degree
    17. rotated_image3 = Original_Image.rotate(60)
    18.  
    19. rotated_image1.show()
    20. rotated_image2.show()
    21. rotated_image3.show()

    在图像上写文字

    • 水印或任何其他文本是图像中的重要因素之一。下面的程序将让你了解如何在图像上编写文本。

    1. ###shrink image
    2. img_1 = cv2.imread(r'C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg',1)
    3. img_shrinked = cv2.resize(img_1,(150150), interpolation = cv2.INTER_AREA)
    4. cv2.imshow('img',img_shrinked)
    5. cv2.waitKey(0)
    6. cv2.destroyAllWindows()
    289227fcd304cf1439b8476b8a4d6108.png

    这些是我觉得有趣的图像处理操作。这些所有操作都基于许多图像编辑应用程序。你可以通过结合所有技术来创建相同的应用程序。

    GitHub 链接:https://github.com/ChinmayBH/Exploring-Vision/blob/main/Image%20processing%201.ipynb

    ☆ END ☆

    如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。

    扫描二维码添加小编↓

    82d6e2cd15933537c5b5a85d5182b44c.jpeg

  • 相关阅读:
    软考73-上午题-【面向对象技术2-UML】-UML中的图4
    《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
    java多线程进阶(十)线程池
    iPaaS中API接口管理平台的作用
    VUE3 之 动画与过渡的实现 - 这个系列的教程通俗易懂,适合新手
    LeetCode二进制加法
    【数据测试】之前段端(二)
    我们的爱恨情仇:人性-关系-危机-和谐的科学研究
    树(tree)
    11. Container With Most Water
  • 原文地址:https://blog.csdn.net/woshicver/article/details/128072514