opencv 基础(持续更新中)

news/2024/10/23 18:32:20/

1 前言

https://www.couragesteak.com/

2 安装

3 基础属性demo

打开一张图片:

import cv2img = cv2.imread('./girl.jpg')print(img.shape)  # (1536, 1024, 3)    数组形状
print(type(img))  # numpy 数组
print(img)        # 三维数组(彩色图片:高度、宽度、像素红绿蓝[蓝0, 绿1, 红2])cv2.waitKey()               # 等待键盘任意输入,然后窗口消失
cv2.destroyAllWindows()     # 销毁内存

4 颜色

在OpenCV中有超过150种颜色转换的方法,常用的有 BGR↔Gray 和 BGR↔HSV。

4.1 Gray 灰度处理

# 黑白图片/灰度化处理
# cv2.COLOR_BGR2GRAY
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('gray', gray)

4.2 HSV 颜色空间

RGB适用于显示系统;

HSV适用于图像处理(物体跟踪)。

属性取值范围
H(色彩/色度)[0, 179]
S(饱和度)[0, 255]
V(亮度)[0, 255]

注意:不同软件取值可能不同。

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
cv2.imshow('hsv', hsv)

4.3 颜色调整&翻转

# 颜色翻转
# 颜色翻转 img[:, :, ::-1]
cv2.imshow("girl老铁", img[:, :, ::-1])# 三原色调整
cv2.imshow("girl老铁", img[:, :, [0, 2, 1]])

4.4 物体跟踪(蓝色物体周围画一个圈)

import cv2
import numpy as npimg = cv2.imread('./url.png')
cv2.imshow('img', img)# HSV 在物体跟踪时比较有效
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)  # 颜色空间转变
# cv2.imshow('hsv', hsv)# 定义在HSV颜色空间中的 蓝色 范围
lower_blue = np.array([110, 50, 50])  # 浅蓝
upper_blue = np.array([130, 255, 255])  # 深蓝
# 根据蓝色的范围,标记图片中哪些位置是蓝色
# 在范围内标记为1,不在标记为0
mask = cv2.inRange(hsv, lower_blue, upper_blue)
# 位运算
res = cv2.bitwise_and(img, img, mask=mask)
cv2.imshow('res', res)# 0:无限等待
cv2.waitKey(3000)  # 无操作,2s后自动消失
cv2.destroyAllWindows()  # 销毁内存

image.png

5 大小与位置

5.1 翻转

# 上下翻转 img[::-1, :, :]
cv2.imshow("girl老铁", img[::-1, :, :])     # 上下翻转  弹出窗口(文字只能是英文)

6 图片马赛克

6.1 缩小->放大拉伸

这种方式,可以理解为模糊化

img2 = cv2.resize(img, (30, 16))
img3 = cv2.resize(img2, (240, 128))

image.png

6.2 缩小,放大比例

img2 = cv2.resize(img, (100, 100))  # 先缩小
img3 = np.repeat(img2, 5, axis=1)  # x轴 放大10倍
img4 = np.repeat(img3, 5, axis=0)  # y轴 放大10倍

image.png

6.3 像素抽取

每10个中 取一个像素

import cv2img = cv2.imread("./img/girl2.png")print(img.shape)  # 宽512、高512img2 = img[::10, ::10]  # 每10个中 取一个像素# 由于图片比较小,我们加入下面2行代码,放大窗口
cv2.namedWindow("girl", flags=cv2.WINDOW_NORMAL)
cv2.resizeWindow("girl", 512, 512)cv2.imshow('girl', img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

7 人脸操作

7.1 人脸检测

下载特征文件:

https://github.com/opencv/opencv/tree/4.x/data/haarcascades

data/haarcascades/haarcascade_frontalface_alt.xml

# -*- coding:utf-8 -*-
"""@Author   :有勇气的牛排@FileName : 06 人脸检测.py@desc     : 描述
"""
import cv2img = cv2.imread("./img/girls2.png")# 加载 人脸 特征文件(opencv库貌似自带)
face_detector = cv2.CascadeClassifier("./static/haarcascade_frontalface_alt.xml")
# 识别人脸,并且获取坐标:x、y、w、h
"""
[[744 100 142 142][205 165 153 153]]
"""
faces = face_detector.detectMultiScale(img)
print(faces)
for x, y, w, h in faces:# 绘制 矩形"""pt1: 左上角pt2: 左下角thickness: 线条粗细"""cv2.rectangle(img,pt1=(x, y),pt2=(x + w, y + h),color=[0, 0, 255],thickness=2)cv2.imshow("girl", img)cv2.waitKey(0)
cv2.destroyAllWindows()

image.png

优化:

  • 黑白色更容易识别
  • 识别效果系数整
# -*- coding:utf-8 -*-
"""@Author   :有勇气的牛排@FileName : 06 人脸检测.py@desc     : 描述
"""
import cv2img = cv2.imread("./img/hezhao.png")# 图片 改为 黑白色,识别更友好(数据更少)
gray = cv2.cvtColor(img, code=cv2.COLOR_BGR2GRAY)# 加载 人脸 特征文件(opencv库貌似自带)
face_detector = cv2.CascadeClassifier("./static/haarcascade_frontalface_alt.xml")
# 识别人脸,并且获取坐标:x、y、w、h
"""
[[744 100 142 142][205 165 153 153]]scaleFactor: 缩放 倍数 -> 放大缩小 判断是否是人脸scaleFactor: 坐标 x、y、w、h
"""
faces = face_detector.detectMultiScale(gray,scaleFactor=1.05,minNeighbors=3)
print(faces)
for x, y, w, h in faces:# 绘制 矩形"""pt1: 左上角pt2: 左下角thickness: 线条粗细"""# cv2.rectangle(img,#               pt1=(x, y),#               pt2=(x + w, y + h),#               color=[0, 0, 255],#               thickness=2)# 画圆圈cv2.circle(img,center=(x+w//2, y+h//2),radius=w//2,color=[0, 255, 0],thickness=2)cv2.imshow("girl", img)cv2.waitKey(0)
cv2.destroyAllWindows()

image.png

7.2 人脸 马赛克

# -*- coding:utf-8 -*-
"""@Author   :有勇气的牛排@FileName : 07 人脸 马赛克.py@desc     : 描述
"""import cv2
import numpy as npimg = cv2.imread("./img/girl2.png")# 图片 改为 黑白色,识别更友好(数据更少)
gray = cv2.cvtColor(img, code=cv2.COLOR_BGR2GRAY)# 加载 人脸 特征文件(opencv库貌似自带)
face_detector = cv2.CascadeClassifier("./static/haarcascade_frontalface_alt.xml")
# 识别人脸,并且获取坐标:x、y、w、h
faces = face_detector.detectMultiScale(gray,scaleFactor=1.05,minNeighbors=3)"""
187 89 152 152
人脸1:左上角 坐标:(187, 89)右下角 坐标:(339, 241)
"""for x, y, w, h in faces:# cv2.rectangle(img,#               pt1=(x, y),#               pt2=(x + w, y + h),#               color=[0, 0, 255],#               thickness=2)print(x, y, w, h)# 获取人脸区域 切片face = img[y:y + h, x:x + w]# img[y:y+h, x:x+w] = face[:, :, ::-1]  # 脸部区域 变色 测试# 人脸 马赛克,切片face = face[::10, ::10]  # 每10个中取一个像素face = np.repeat(face, 10, axis=0)  # 高 --- 行face = np.repeat(face, 10, axis=1)  # 宽 --- 列# 将马赛克区域 尺寸矫正img[y:y + h, x:x + w] = face[:152, :152]cv2.imshow("girl", img)cv2.waitKey(0)
cv2.destroyAllWindows()

image.png

7.3 人脸加贴纸

for x, y, w, h in faces:cv2.rectangle(img,pt1=(x, y),pt2=(x + w, y + h),color=[0, 0, 255],thickness=2)print(x, y, w, h)# 填满整个脸# img[y:y+h, x:x+w] = cv2.resize(sticker, (w, h))# 脸部1/4 左上角# img[y:y+h//2, x:x+w//2] = cv2.resize(sticker, (w//2, h//2))# 居中img[y:y+h//2, x+30:x+w//2+30] = cv2.resize(sticker, (w // 2, h // 2))

image.png


http://www.ppmy.cn/news/1114630.html

相关文章

CSDN每日一练 |『水池注水』『查找点在自然区间的坐标』『近视的小张』2023-09-18

CSDN每日一练 |『水池注水』『查找点在自然区间的坐标』『近视的小张』2023-09-18 一、题目名称:水池注水二、题目名称:查找点在自然区间的坐标三、题目名称:近视的小张一、题目名称:水池注水 时间限制:1000ms内存限制:256M 题目描述: 给定 n * n水池。 向n * n水池中注…

九鼎开发板Uboot开发问题——sd_fusing运行异常

在学习朱有鹏老师的嵌入式Linux——Uboot移植,运行sd_fusing.sh脚本出现mkfs.fat命令参数问题,一直提示"No device specified." 脚本内容: # # Copyright (C) 2010 Samsung Electronics Co., Ltd. # http://www.sams…

高考十年了,聊聊挣钱这件事

转眼间,一年高考又过去了,从 2013 年高考时,转眼间,十年了。 回首十年间,当年的豪言壮志你是否实现了?还是被社会毒打,磨平菱角,意识到自己只是一个普通人。 今天,我们…

声音生成评价指标——使用声音分类模型评价生成声音质量(基于resnetish、VGGish、AlexNet)

文章目录 引言正文数据预处理将wav转成log-mel频谱图进行保存创建dataset类保存数据 模型定义模型训练过程训练代码定义loss为nan从AlexNet到ResNetloss上下剧烈波动——使用学习率衰减策略学习率调整——根据准确率来调整学习率数据处理问题 模型的测试 总结 引言 这篇文章主要…

企业架构LNMP学习笔记46

PHP测试连接代码&#xff1a; php代码测试使用memcached&#xff1a; 示例代码&#xff1a; <?php //实例化类 $mem new memcached(); //调用连接memcached方法 注意连接地址和端口号 $mem->addServer(192.168.17.114,11211); //存数据 var_dump($mem->set(name,l…

【实习、初级、中级】测试工程师,结合工作经验,我准备了3套求职简历模板。

历时2年&#xff0c;7000粉丝问答&#xff0c;帮助上百位“刚培训毕业”、“1~3年经验”的软件测试伙伴&#xff0c;成功入职&#xff01; 我将这些问题内容&#xff0c;会持续更新记录在 「软件测试」求职指南 专栏。 求职简历中的误区 对于简历应该具备哪些模块&#xff0c…

支持向量机(SVM)案例分析

支持向量机&#xff08;support vector machines, SVM&#xff09;是一种二分类模型&#xff0c;所谓二分类模型是指比如有很多特征&#xff08;自变量X&#xff09;对另外一个标签项&#xff08;因变量Y&#xff09;的分类作用关系&#xff0c;比如当前有很多特征&#xff0c;…

内网隧道代理技术(二十四)之 ICMP隧道介绍

ICMP隧道介绍 ICMP介绍 ICMP(InternetControl MessageProtocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但…