标签:img 读书笔记 Python 矩阵 cv2 OpenCV 300 np
我们上一篇简要的了解了一下机器学习的算法基础,也就是回归分析。今天我们就来看一看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()
这个是运行结果,还挺好看的:
那么今天的读书笔记就分享到这里了,我们下次再见!
标签:img,读书笔记,Python,矩阵,cv2,OpenCV,300,np 来源: https://blog.csdn.net/awaitxm/article/details/122708924
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。