【人工智能】人脸识别检测戴口罩实战之初识OpenCV简单操作之图像处理,实现脸部打码【第二课】

简介: 初识OpenCV简单操作之图像处理,获取人脸特征,给图像简单的打码,绘制图形、运算、几何变换、平滑处理、边缘检测

初识OpenCV简单操作之图像处理,获取人脸特征,给图像简单的打码,绘制图形、运算、几何变换、平滑处理、边缘检测

一、获取图像的感兴趣区域

(1)通过像素矩阵直接得到ROI区域

img[140:260,210:340]

(2)对图像ROI域进行赋值

img[180:300,270:400] = face1

获取脸部信息

import cv2

img = cv2.imread('D:\opencvdata\lena.jpg')
face = img[140:260,210:340]

cv2.imshow('img',img)
cv2.imshow('face',face)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

获取其他特征

由此我们也可以推出,获取鼻子,眼睛,嘴巴等特征
140:260为高
210:340为宽

import cv2

img = cv2.imread('D:\opencvdata\lena.jpg')
face = img[140:260,210:340]
eye = img[140:180,210:340]
mouth = img[220:260,210:340]
nose = img[180:220,210:340]

# img[140:260,210:340] = 0
cv2.imshow('img',img)
cv2.imshow('face',face)
cv2.imshow('eye',eye)
cv2.imshow('nose',nose)
cv2.imshow('mouth',mouth)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

图像域赋值

import cv2

img = cv2.imread('D:\opencvdata\lena.jpg')
face = img[140:260,210:340]
img[140:260,210:340] = 0
img[140:260,210:340] = 255
cv2.imshow('img',img)
cv2.imshow('face',face)

cv2.waitKey(0)
cv2.destroyAllWindows()

赋值为0,为黑色
在这里插入图片描述
赋值为255,为白色
在这里插入图片描述

对其他特征赋值,简单的打码😁😁
在这里插入图片描述

二、绘制图形

画直线cv2.line()

import cv2
img = cv2.imread(r'D:\opencvdata\b.jpg')
cv2.line(img,(0,0),(400,300),(0,255,0),10)
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述
(0,0) 开始点
(400,300) 结束点
(0,255,0) 颜色
10 粗细

画圆 cv2.circle()

cv2.circle(img,(200,200),100,(0,0,255),10)

在这里插入图片描述
(200,200) 圆心
100 半径
(0,0,255) 颜色
10 粗细

画矩形 cv2 rectal.gle()

cv2.rectangle(img,(10,10),(200,200),(100,100,100),5)

在这里插入图片描述
(10,10) 左上角
(200,200) 右下角
(100,100,100) 颜色
5 粗细

画椭圆 cv2.ellipse()

cv2.ellipse(img,(300,300),(100,50),0,0,360,(0,120,80),3)

在这里插入图片描述
(300,300) 中心
(100,50) 长轴
0 角度
0 开始角度
360 结束角度
(0,120,80) 颜色
3 粗细

添加文字 cv2.putText()

cv2.putText(img,"opencv",(300,400),cv2.FONT_HERSHEY_COMPLEX,2.0,(0,0,255),3)

在这里插入图片描述
"opencv",显示文本
(300,400) 显示位置
cv2.FONT_HERSHEY_COMPLEX,字体类型
2.0,字体大小
(0,0,255),字体颜色
3 粗细

三、图像运算

图像运算就是对图像的每个像素进行处理,图像的运算包括算术运算和逻辑运算,也称为按位运算。
图像的算数运算是指对多幅图你进行加、减、乘、除运算。
图像的逻辑运算是指对多幅图像进行与、或、非、异或运算。
注意:
两个图像在进行运算时,图像的像素大小和类型要完全一致,否则opencv就会报错。

图像加法运算

‘+’

import cv2
img1 = cv2.imread(r'D:\opencvdata\g.jpg')
img2 = cv2.imread(r'D:\opencvdata\t.jpg')

img3 = img2 + img1
cv2.imshow('img',img3)

cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

cv2.add(img 1,img2)

大于255,对255取模;

img4 = cv2.add(img1,img2)

在这里插入图片描述

cV2.addWeighted(img1,a1pha,img2,beta,gamma)

大于255,以255计数

img5 = cv2.addWeighted(img1,0.3,img2,0.7,0)

0.3和0.7分别为两个图像所占权重
在这里插入图片描述

图像减法运算

‘-’

小于0,对255取模;

img3 = img2 - img1

在这里插入图片描述

cv2.subtract(img 1,img2)

img4 = cv2.subtract(img1,img2)

小于0使用0计数
在这里插入图片描述

图像乘法运算

‘*’

img3 = img2 * img1

在这里插入图片描述

cv2.multiply(img1,img2)


img4 = cv2.multiply(img1,img2)

在这里插入图片描述

图像除法运算

/

img3 = img2 / img1

在这里插入图片描述

cv2.divide(img 1,img2)


img4 = cv2.divide(img1,img2)

在这里插入图片描述

图像按位与操作

cv2.bitwise_and(img1,img2[,mask])

img4 = cv2.bitwise_and(img1,img2)

在这里插入图片描述

图像按位或操作

cv2.bitwise_or(img1,img2[,mask])


img5 = cv2.bitwise_or(img1,img2)

在这里插入图片描述

图像按位取反操作

cv2.bitwise_not(img 1[,mask])


img6 = cv2.bitwise_not(img1)

在这里插入图片描述

图像按位异或操作

cv2.bitwise_xor(img 1,img2[,mask])


img7 = cv2.bitwise_xor(img1,img2)

在这里插入图片描述
更加清晰的看到效果

mask = cv2.imread('D:\opencvdata\m.png',0)

w,h,_ = img1.shape
mask = cv2.resize(mask,(w,h))
img7 = cv2.bitwise_xor(img1,img2,mask=mask)
det = cv2.bitwise_xor(img7,img2)

在这里插入图片描述
在这里插入图片描述

四、图像几何变换

(1)图像缩放

函数:dst = cv2.resize( src, dsize[, fx, fy, interpolation])

参数: src表示源图像;
dsize表示目标图像大小;
fx表示水平轴上的比例因子;
fy表示垂直轴上的比例因子;
interpolation插值方法,共有5种。

interpolation 5种插值方法:
1) INTER_NEAREST-近邻插值法;
2) INTER_LINEAR-双线性插值法(默认);
3) INTER_AREA -区域插值法,基于局部像素的重采样;
4) INTER_CUBIC-三次样条插值,基于4x4像素邻域的3次插值法;
5) INTER_LANCZOS4 -基于8x8像素邻域的Lanczos插值

在使用cv2.resize ()对原始图像进行缩放,
当缩小图像时,使用区域插值方式(INTER_AREA)能够得到最好的效果;
当放大图像时,使用三次样条插值(INTER_CUBIC)方式和双线性插值(INTER_LINEAR)方式都能够取得较好的效果。
三次样条插值方式速度较慢,双线性插值方式速度相对较快且效果并不差。

dst = cv2.resize(img,(1000,500),cv2.INTER_AREA)

在这里插入图片描述

dst = cv2.resize(img,None,fx=0.2,fy=0.3)

在这里插入图片描述

(2)图像翻转

函数: dst = cV2.flip( src, flipCode )

参数: src表示源图像;
flipCode表示翻转方式;
0绕x轴翻转;
1绕y轴翻转;
-1绕x,y轴同时翻转。

import cv2

img = cv2.imread('D:\opencvdata\g.jpg')

dst1 = cv2.flip(img,1)
dst2 = cv2.flip(img,0)
dst3 = cv2.flip(img,-1)

cv2.imshow('img',img)
cv2.imshow('dst1',dst1)
cv2.imshow('dst2',dst2)
cv2.imshow('dst3',dst3)

cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、图像平滑

在保留图像原有信息的基础上,过滤并去除掉图像中的噪声,这一过程就是图像的平滑处理,所得图像被称为平滑图像。
平滑处理的基本原理是:将噪声点的像素值处理为其周围临近像素点像素值的临近值。取近似值的方法很多,主要有如下的几种方法:均值滤波、方框滤波、高斯滤波、中值滤波、双边滤波、2D卷积。

cv2. GaussianBlur (img, ksize, sigmaX)

参数:img输入原图;
ksize 高斯内核大小
sigmaX X方向上的高斯核标准偏差

import cv2

img = cv2.imread(r'D:\opencvdata\noise.png')
img2 = cv2.GaussianBlur(img,(7,7),0)

cv2.imshow('img',img)
cv2.imshow('img2',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

六、图像边缘检测

边缘是指图像中图像像素值变化明显的位置。这些变化明显的位置常常是图像中需要关注的位置,对这些关键位置的检测,就叫做边缘检测。
如果将图像的每一行像素和每一列像素都描述成一个关于灰度值的函数,那么图像的边缘对应在灰度值函数中是函数值突然变大的区域。函数值的变化趋势可以用函数的导数描述。因此可以通过寻找导数值较大的区域去寻找函数中突然变化的区域,进而确定图像中的边缘位置。
通常我们可以把边缘检测分为以下三个类型:
(1)通过计算图像的梯度值来检测图像的边缘,如Sobel算子、Prewitt算子、Roberts算子及差分过缘检测
(2)通过寻求二阶导数中的过零点来检测边缘,如拉普拉斯算子、高普拉普拉斯算子、Canny算子边缘检测。
(3)混合一阶与二阶微分为基础的边缘检测,综合利用一阶微分与二阶微分特征,如Marr-Hildreth边缘检测算子。

cv2. Canny (img, thresholdl, threshold2)

参数: img输入原图
threshold1 國值1
threshold2 國值2

import cv2

img = cv2.imread(r'D:\opencvdata\g.jpg')
img2 = cv2.Canny(img,50,200)
cv2.imshow('img',img)
cv2.imshow('img2',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述
类似素描了👓👓👓!

目录
相关文章
|
3月前
|
算法 计算机视觉
基于qt的opencv实时图像处理框架FastCvLearn实战
本文介绍了一个基于Qt的OpenCV实时图像处理框架FastCvLearn,通过手撕代码的方式详细讲解了如何实现实时人脸马赛克等功能,并提供了结果展示和基础知识回顾。
149 7
|
3月前
|
文字识别 计算机视觉 开发者
基于QT的OCR和opencv融合框架FastOCRLearn实战
本文介绍了在Qt环境下结合OpenCV库构建OCR识别系统的实战方法,通过FastOCRLearn项目,读者可以学习Tesseract OCR的编译配置和在Windows平台下的实践步骤,文章提供了技术资源链接,帮助开发者理解并实现OCR技术。
179 9
基于QT的OCR和opencv融合框架FastOCRLearn实战
|
5月前
|
机器学习/深度学习 人工智能 Shell
人工智能平台PAI操作报错合集之在分布式训练过程中遇到报错,是什么原因
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
5月前
|
机器学习/深度学习 人工智能 数据处理
人工智能平台PAI操作报错合集之任务重启后出现模型拆分报错,该怎么办
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
2月前
|
机器学习/深度学习 算法 计算机视觉
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
109 2
|
3月前
|
计算机视觉
基于QT的opencv插件框架qtCvFrameLearn实战
这篇文章详细介绍了如何基于Qt框架开发一个名为qtCvFrameLearn的OpenCV插件,包括项目配置、插件加载、Qt与OpenCV图像转换,以及通过各个插件学习OpenCV函数的使用,如仿射变换、卡通效果、腐蚀、旋转和锐化等。
62 10
|
5月前
|
机器学习/深度学习 人工智能 分布式计算
人工智能平台PAI操作报错合集之引用github.com/alibaba/pairec包时报错,该如何解决
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
5月前
|
机器学习/深度学习 人工智能 网络协议
人工智能平台PAI操作报错合集之报错 "curl: (35) TCP connection reset by peer" 表示什么
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
7月前
|
弹性计算 Java PHP
新手用户注册阿里云账号、实名认证、购买云服务器图文教程参考
对于初次购买阿里云产品的用户来说,第一步要做的是注册账号并完成实名认证,然后才是购买阿里云服务器或者其他云产品,本文为大家以图文形式展示一下新手用户从注册阿里云账号、实名认证到购买云服务器完整详细教程,以供参考。
新手用户注册阿里云账号、实名认证、购买云服务器图文教程参考
|
6月前
|
文字识别 算法 API
视觉智能开放平台产品使用合集之uniapp框架如何使用阿里云金融级人脸识别
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
150 0