目录
一、numpy
1、定义
2、库
3、ndarray的创建
4、函数
(1)arange 区间
(2)linspace 等差数列
(3)zeros 全0矩阵
(4)ones 全1矩阵
(5)自定义规则生成ndarray
5、属性
(1)dtype
(2)shape?
(3)size
(4)ndim
(5)itemsize
6、切片索引
7、截取图片
8、numpy广播
9、图片改变
(一)翻转
(二)裁剪
?(三)图片变亮变暗
二、Pandas(待补充)
一、numpy
1、定义
运行速度非常快的数学库
2、库
引入库并重命名
import numpy as np #重命名
0轴 1轴 2轴。。。?
3、ndarray的创建
- Numpy中的核心对象是ndarray
- ndarray对维数没有限制
a=np.array([1,2,3,4],dtype=float)
print(a)
#[1. 2. 3. 4.]
4、函数
(1)arange 区间
参数(和list差不多):(start,end,step)---起始数字,结束数字,间隔区间
(2)linspace 等差数列
:浮点数2.0到3.0之间产生五个数,故每隔0.25输出一个数
aa = np.linspace(2.0, 3.0, num=5)
print(aa)
#[2. 2.25 2.5 2.75 3. ]
(3)zeros 全0矩阵
(4)ones 全1矩阵
# 全1矩阵
b=np.ones((3,3),np.int)
print(b,type(b))
#[[1 1 1]
#[1 1 1]
#[1 1 1]] <class 'numpy.ndarray'>
(5)自定义规则生成ndarray
- fromfunction第一个参数接收计算函数,第二个参数接收数组的形状。
# 自定义规则生成ndarray
def func(i):
return i % 4 + 1
res=np.fromfunction(func, (10,))
print(res)
#[1. 2. 3. 4. 1. 2. 3. 4. 1. 2.]
5、属性
(1)dtype
每个元素的属性
#没有指明类型
a=np.array([1,2,3,4])
print(a)
#[1 2 3 4]
#指明dtype=float
a=np.array([1,2,3,4],dtype=float)
print(a)
#[1. 2. 3. 4.]
(2)shape?
例1:读取图片的维度
img=cv2.imread("lyf.jpg")
print(img,type(img),img.shape)
# ...
# [126 112 113]
# [145 131 132]
# [137 123 124]]] <class 'numpy.ndarray'> (461, 438, 3)
例2:普通矩阵的维度
q = np.array([[1,2,3,4],[5,6,7,8],[7,8,9,10]])
print(q.shape)
#(3, 4)
#矩阵q为三行四列
(3)size
元素个数
(4)ndim
数组维度
(5)itemsize
6、切片索引
- 通过索引或者切片有规律的查找指定位置的元素
- 可以使用整数数组索引法对数组元素切片,这样修改新的数组不会改变原来的数组
(1)访问元素(和list差不多(start,end,step))
# 切片
s=np.arange(10)
print(s) #[0 1 2 3 4 5 6 7 8 9]
print(s[...]) #全部元素[0 1 2 3 4 5 6 7 8 9]
print(s[::-1]) #全部元素倒序[9 8 7 6 5 4 3 2 1 0]
print(s[7:1:-2]) #从7到1 每个两个元素打印一个,不取1[7 5 3]
(2)修改元素
#修改索引为4、5、6、7的元素
s[4:8]=45,46,57,67
print(s)
#[ 0 1 2 3 45 46 57 67 8 9]
#从4开始到8(不取8)每个两个元素修改一个元素
s[4:8:2]=45,46
print(s)
#[ 0 1 2 3 45 5 46 7 8 9]
7、截取图片
使用级联分类器
(1)找到haarcascade_frontalface_alt2.xml文件拉到工程目录下
(2)创建级联分类器对象
detector=cv2.CascadeClassifier("haarcascade_frontalface_alt2.xml")
(3)检测图片? detectMultiScale()
faces=detector.detectMultiScale(img,1.3,3)
print(faces)
"""
它可以检测出图片中所有的人脸,并将人脸用vector保存各个人脸的坐标、大小(用矩形表示),函数由分类器对象调用:
detectMultiScale
(
self,
image, #要检测的图片
scaleFactor=None, #缩放比例 1.1、1.3
minNeighbors=None, #构成检测目标的相邻矩形的最小个数,默认值是3 奇数(1,3,5)
flags=None, #是否可缩放
minSize=None, #限制得到的目标区域的范围。
maxSize=None #限制得到的目标区域的范围。
)
"""
(4)截取人脸区域并显示
for x,y,width,height in faces:
img=img[y:y+height,x:x+width]
cv2.imshow("face",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果:
完整代码
# 截取图片
import cv2
img=cv2.imread("lyf.jpg")
print(img,type(img),img.shape)
#创建级联分类器对象
detector=cv2.CascadeClassifier("haarcascade_frontalface_alt2.xml")
#检测图片
faces=detector.detectMultiScale(img,1.3,3)
print(faces)
#截取人脸区域
for x,y,width,height in faces:
img=img[y:y+height,x:x+width]
cv2.imshow("face",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
8、numpy广播
9、图片改变
(一)翻转
(1)关于X轴对称(上下翻转)
import cv2
img=cv2.imread("ysjx.png")
cv2.imshow("1",img)
# cv2上下颠倒
img1=img[::-1]
cv2.imshow("X",img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
(2)关于Y轴对称
:表示行全部,::-1表示列逆序,所以形成水平翻转
# 图片左右翻转 :表示行全部,::-1表示列逆序,所以形成水平翻转
img2=img[:,::-1]
?
(3)关于原点对称(上下左右都翻转)
?
?全部代码:
import cv2
img=cv2.imread("ysjx.png")
cv2.imshow("1",img)
# 沿着x轴 上下颠倒:行逆序
img1=img[::-1]
# 沿着Y轴 图片左右翻转 :表示行全部,::-1表示列逆序,所以形成水平翻转
img2=img[:,::-1]
# 通道改变,变成灰色
# img3=img[:,:,-1]
# 沿着原点 行列都逆序
img3=img[::-1,::-1]
cv2.imshow("X",img1)
cv2.imshow("Y",img2)
cv2.imshow("0",img3)
cv2.waitKey(0)
cv2.destroyAllWindows()
(二)裁剪
(1)截取下半段
与高度有关---行数×0.5(转换为int型)
#截取下半段
img4=img[int(0.5*img.shape[0]):]
(2)截取左半段
与宽度有关---列数×0.5(转换为int型)
img5=img[:,:int(0.5*img.shape[1])]
?全部代码:
import cv2
img=cv2.imread("ysjx.png")
cv2.imshow("1",img)
# 沿着x轴 上下颠倒:行逆序
img1=img[::-1]
# 沿着Y轴 图片左右翻转 :表示行全部,::-1表示列逆序,所以形成水平翻转
img2=img[:,::-1]
# img3=img[:,:,-1]
# 沿着原点 行列都逆序
img3=img[::-1,::-1]
#截取下半段
img4=img[int(0.5*img.shape[0]):]
img5=img[:,:int(0.5*img.shape[1])]
# cv2.imshow("X",img1)
# cv2.imshow("Y",img2)
# cv2.imshow("0",img3)
cv2.imshow("bottom",img4)
cv2.imshow("left",img5)
cv2.waitKey(0)
cv2.destroyAllWindows()
(3)截取行数(每隔一行抽取一行)
#抽取行数截取
img6=img[::2]
cv2.imshow("hg2",img6)
(三)图片变亮变暗
(1)图片变暗(img*0.5 不一定是整数,故要处理)
img7=(0.5*img).astype(np.uint8)
cv2.imshow("dark",img7)
?(2)图片变亮(不能单纯的*2,因为很有可能*2后大于255,故要处理)
img8=np.clip(1.5*img,a_min=0.,a_max=255.).astype(np.uint8)
cv2.imshow("bling",img8)
?(6)bgr转rgb(通道改变)
上述处理都是bgr模式
(7)灰度处理(待补充)
二、Pandas(待补充)
|