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:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg"
)

cv2.imshow(
"img"
,img_1)

cv2.waitKey(
0
)

cv2.destroyAllWindows()

cv2 读取图像
运行代码后,将打开一个单独的窗口,你将看到你的图像。
  • Waitley 代表你希望在屏幕上停留多长时间的时间。
  • destroyAllWindows() 是用于在时间结束后删除图像的命令。
  • 输出图像是数组的形式。
  1. Pillow 库
PIL(Python Imaging Library)为 Python 添加了许多图像处理功能。Pillow 是 PIL 的一个分支,增加了一些用户友好的特性。
# read image by PIL

from
 PIL 
import
 Image 

# creating a object
img = Image.open(
r"C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg"

img.show()

type(img)

输出:
  • 输出格式为JPG格式[PIL.JpegImagePlugin.JpegImageFile]
  1. 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:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg'
)

imgplot = plt.imshow(img)

plt.show()

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

使图像模糊

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

img_1 = cv2.imread(
r"C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg"
)

blur = cv2.blur(img_1,(
5
,
5
))

cv2.imshow(
"img"
,blur)

cv2.waitKey(
0
)

cv2.destroyAllWindows()

  1. 内核模糊
你可以自定义模糊率和其他内容。
#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()

  1. 中值模糊
##median blurr
img_1 = cv2.imread(
r"C:\Users\ChinmayB\Downloads\pexels-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:\Users\ChinmayB\Downloads\pexels-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:\Users\ChinmayB\Downloads\pexels-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:\Users\ChinmayB\Downloads\pexels-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:\Users\ChinmayB\Downloads\pexels-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:\Users\ChinmayB\Downloads\pexels-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:\Users\ChinmayB\Downloads\pexels-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:\Users\ChinmayB\Downloads\pexels-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:\Users\ChinmayB\Downloads\pexels-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()

这些是我觉得有趣的图像处理操作。这些所有操作都基于许多图像编辑应用程序。你可以通过结合所有技术来创建相同的应用程序。
GitHub 链接:https://github.com/ChinmayBH/Exploring-Vision/blob/main/Image%20processing%201.ipynb
☆ END ☆
如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文
扫描二维码添加小编↓
继续阅读
阅读原文