IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python矩阵:【numpy、Panda】级联分类器截取人脸区域显示、图片处理(翻转、变亮变暗、截取) -> 正文阅读

[Python知识库]python矩阵:【numpy、Panda】级联分类器截取人脸区域显示、图片处理(翻转、变亮变暗、截取)

目录

一、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广播

  • shape不同,只有其中一个是1维的时候才能广播

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(待补充)

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-07-05 23:30:09  更:2022-07-05 23:31:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 12:06:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码