Python深度学习:计算机视觉处理库OpenCVNumpy编辑图片高斯模糊处理(读书笔记)
Posted 芝士工具猿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python深度学习:计算机视觉处理库OpenCVNumpy编辑图片高斯模糊处理(读书笔记)相关的知识,希望对你有一定的参考价值。
我们上一篇简要的了解了一下机器学习的算法基础,也就是回归分析。今天我们就来看一看OpenCV的使用。
第三篇
一、三维矩阵存储图片–在Python中使用OpenCV
在正式讲解OpenCV在Python中的使用之前,我们需要了解一个概念,就是使用OpenCV读取任何图片均是将其转化成二维矩阵进行。
例如,读取一张图片:
jpg = cv2.imread("1.jpg")
print(jpg.shape)
结果就是:(435, 676, 3),也就是说,图片被读取成一个大小为[435,676,3]的矩阵,这是一个三维矩阵,由3个[435,676]的矩阵构成。
例如打印第一个矩阵:
print(jpg[:,:,0])
就是一个[435,676]的矩阵。也可以打印出图片:
代码如下:
jpg = cv2.imread("1.jpg")
jpg1 = jpg[:,:,0]
cv2.imshow("jpg1",jpg)
cv2.waitKey()
二、OpenCV读取图片
现在,我们就来看一看图片是怎么以矩阵的形式存储在介质中的:
例:
img = np.mat(np.zeros((300,300))) # 创建一个长、宽各为300的矩阵,各个点的值为0
cv2.imshow("test",img)
cv2.waitKey()
那么这就是一张一维的黑色图片,现实生活中,图片一般由红(R)、绿(G)、蓝(B)三种颜色组成,也就是三原色。因而图片显示时,是3通道的(矩阵的第三维即颜色通道),也就是说,我们可以给每一个维度不同的数值,来存储同一张图片。
至于想更深入了解三维矩阵存储图片的读者。可以看一看这篇博客:
关于三通道彩色图像的存储方式理解
那么数组能不能转换成矩阵?
当然是可以的:
image = np.mat(np.zeros((300,300)))
imageByteArray = bytearray(image)
print(imageByteArray)
imageBGR = np.array(image).reshape(200,450)
cv2.imshow("cool",imageBGR)
cv2.waitKey()
print(imageByteArray)
的结果是:
也就是全黑的意思。
那么转换成图像就是cv2.imshow("cool",imageBGR)
的结果:
我们了解了这些之后,自然也就明白,可以随机生成一副图片:
randomByteArray = bytearray(os.urandom(120000))
flatNumpyArray = np.array(randomByteArray).reshape(300,400)
cv2.imshow("cool",flatNumpyArray)
cv2.waitKey()
结果如图:
这个就是随机生成的一个120000的数组,重构成[300,400]的矩阵之后显示的结果。
三、使用Numpy对图像进行编辑
那么,我们可以不可以定向的改变图片的颜色?可以:
生成一个像素点10*10的白块加黑块:
img = np.zeros((300,300))
img[0:10,0:10] = 255
cv2.imshow("img",img)
cv2.waitKey()
结果:
一行或者一列我们也可以操作:
img = np.zeros((300,300))
img[:,10] = 255
img[10,:] = 255
cv2.imshow("img",img)
cv2.waitKey()
四、OpenCV的卷积核处理
在OpenCV以及日常的图像处理中,卷积核是一种常用的图像处理工具。其主要的方法是通过确定的核块来检测图像的某个区域,之后根据所检测的像素与其周围存在的像素的亮度差值来改变像素明亮度。
例如还是这张图为例:
使用[3,3]卷积核的结果如下:
kernel33_D = np.array([[1,1,1],
[1,-8,1],
[1,1,1]]) # 这个核的作用就是减少中心像素的亮度
# 另一个卷积核刚好相反:
kernel33 = np.array([[-1,-1,-1]
,[-1,8,-1],
[-1,-1,-1]]) # 如果亮度差距大,本身图像的中央亮度小,经过卷积核之后,中央像素的亮度增加
import numpy as np
import cv2
from scipy import ndimage
kernel33_D = np.array([[1,1,1],
[1,-8,1],
[1,1,1]]) # 这个核的作用就是减少中心像素的亮度
img = cv2.imread("1.jpg",0)
linghtImg = ndimage.convolve(img,kernel33_D)
cv2.imshow("img",linghtImg)
cv2.waitKey()
那么我们也有别的卷积特征提取方式,例如高斯模糊:
import numpy as np
import cv2
from scipy import ndimage
img = cv2.imread("1.jpg",0)
blurred = cv2.GaussianBlur(img,(11,11),0)
gaussImg = img - blurred
cv2.imshow("img",gaussImg)
cv2.waitKey()
这个是运行结果,还挺好看的:
那么今天的读书笔记就分享到这里了,我们下次再见!
以上是关于Python深度学习:计算机视觉处理库OpenCVNumpy编辑图片高斯模糊处理(读书笔记)的主要内容,如果未能解决你的问题,请参考以下文章
『python』OpenCV3计算机视觉库第二弹_简单的图片处理
30个顶级Python库:用于深度学习自然语言处理和计算机视觉
深度盘点:30个用于深度学习自然语言处理和计算机视觉的顶级 Python 库
AI:Python与人工智能相关的库/框架(机器学习&深度学习&数据科学/计算机视觉/自然语言处理)的简介案例应用之详细攻略