今天小编来和大家分享一下Python
在图像处理当中的具体应用,那既然是图像处理,那必然要提到opencv
模块了,该模块支持与计算机视觉和机器学习相关的众多算法,并且应用领域正在日益扩展,大致有以下几种领域
- 物体识别:通过视觉以及内部存储来进行物体的判断
- 图像分割
- 人脸识别
- 汽车安全驾驶
- 人机交互
- 等等
当然这次小编并不打算将这么高深的内容,今天就从最基本的opencv
模块在图像的基本操作上说起
模块的安装
模块的安装我们通过都是通过pip
命令来进行的
1
2
|
pip install opencv-python pip install opencv-contrib-python |
图片的各种操作
学过线性代数的肯定怼矩阵并不感到陌生。图像本质上来说就是矩阵,灰度图像是一个普通的矩阵,而彩色图像就是一个多维矩阵,我们对于图像的操作可以自然地转换成是对矩阵的操作
读取图像
首先我们先来读取图像,调用的是cv2.imread()
方法,它的语法格式如下
1
|
cv2.imread(filename, flag = 1 ) |
其中的flag
参数是用来设置读取图像的格式,默认的是1,表示为按照RGB三通道的格式来进行读取,如果设置成0,则表示以灰度图单通道的方式来进行读取,
1
2
3
|
import cv2 import numpy as np img = cv2.imread( '1.jpg' , 0 ) |
展示图像
1
|
cv2.imshow(name, img) |
其参数解释分别如下:
- name: 表示的是展示窗口的名字
- img: 图片的矩阵形式
我们尝试将上面读取的图片展示出来,代码如下
1
2
3
|
cv2.imshow( "grey_img" , img) ## 如果使用了cv2.imshow()函数,下面一定要跟着一个摧毁窗口的函数 cv2.destroyAllWindows() |
当我们运行了上述的代码之后,可以发现在一瞬间当中图片弹了出来,但是还没有等我们看清楚图片的样子之后就直接关闭了,原因在于cv2.imshow()
函数方法并没有延时的作用,我们添加一个延时的函数,代码如下
1
2
3
4
5
6
7
|
import cv2 import numpy as np img = cv2.imread( '1.jpg' ) cv2.imshow( "grey_img" , img) cv2.waitKey( 0 ) cv2.destroyAllWindows() |
output
图片保存
最后我们将图片保存下来,这里用到的函数是cv2.imwrite()
,它的语法格式如下
1
|
cv2.imwrite(imgname, img) |
其参数解释分别如下:
- imgname: 要保存的图片的名字
- img: 图片的矩阵形式
示例代码如下
1
2
3
4
5
6
7
8
|
import cv2 import numpy as np img = cv2.imread( '1.jpg' ) cv2.imshow( "grey_img" , img) cv2.waitKey( 0 ) cv2.imwrite( '1.png' , img) cv2.destroyAllWindows() |
图片的各种属性
有时候我们想要知道图片的像素大小,而图片的本质是矩阵,例如一张1024像素*960像素的图片,就意味着在矩阵当中的行数就是960行,列数是1024列,在opencv
模块当中调用的shape()
函数方法,代码如下
1
2
3
4
5
6
|
import cv2 img = cv2.imread( '1.jpg' ) print (img.shape[ 0 ]) # 行数 print (img.shape[ 1 ]) # 列数 print (img.shape[ 2 ]) # 通道数 |
output
308
340
3
可以看到该图片的像素是340*380,通道数是3,而针对灰度图像而言,我们来看一下图片的属性,代码如下
1
2
|
img = cv2.imread( '1_grey.png' , 0 ) print (img.shape) |
output
(308, 340)
可以看到对于灰度图像而言,我们就没有看到通道数,只有行数和列数
图像的基本操作
最后我们来对图像进行一些基本操作,无非就是改变当中的一些像素值,我们导入一张空白的图片,通过修改当中的像素值来往里面添加一个黑点,代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import cv2 import numpy as np img = cv2.imread( '2.jpg' ) (x, y, z) = img.shape for i in range ( - 10 , 10 ): for j in range ( - 10 , 10 ): # 图片的正中心的位置来改变像素值, img[ int (x / 2 ) + i, int (y / 2 ) + j] = ( 0 , 0 , 0 ) cv2.imshow( "img" , img) cv2.waitKey( 0 ) cv2.destroyAllWindows() |
output
到此这篇关于Python+OpenCV实现基本的图像处理操作的文章就介绍到这了,更多相关Python OpenCV图像处理内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://mp.weixin.qq.com/s/XkYcZxyNWyy-dSsFk_NE_w