【人工智能】人脸识别检测戴口罩实战之初识OpenCV简单操作,图片的读取和显示以及BGR与RGB之间的转换【第一课】

简介: 初识OpenCV简单操作,图片的读取和显示以及BGR与RGB之间的转换,读取视频。解决报错iCCP: cHRM chunk does not match sRGB

初识OpenCV简单操作,图片的读取和显示以及BGR与RGB之间的转换,读取视频。解决报错iCCP: cHRM chunk does not match sRGB

1.OpenCV下载安装

pip install opencv-python

2.简单函数介绍

一、读取图像函数:cv2.imread()

cv2.imread(filename,[flags])参数:
filename:表示读取图像的文件名;flags:是可选参数,表示读取图像的方式。

cv2.imread()有两个参数,第一个参数filename是图片路径,第二个参数flag表示图片读取模式,共有三种:
cv2.IMREAD_COLOR:加载彩色图片,这个是默认参数,可以直接写1。
cv2.IMREAD_GRAYSCALE:以灰度模式加载图片,可以直接写0。
cv2.IMREAD_UNCHANGED:包括alpha(包括透明度通道),可以直接写-1

二、图像显示函数:cv2.imshow()

cv2.imshow(winname,img)参数:
winname:表示显示窗口的名字;img:表示显示的图像。

三、保存图像函数:cv2.imwrite()

第一个参数为文件名称,第二个参数为要显示的图片

四、通道拆分函数:cv2.split()

cv2.split函数分离得到各个通道的灰度值(单通道图像)。

五、通道合并函数:cv2.merge()

cv2.merge函数是合并单通道成多通道(不能合并多个多通道图像)

六、等待键盘操作函数: cv2.waitKey()

cv2.waitKey(time)参数:
time表示等待的时间,单位是毫秒;
0表示一直等待。

如果少了就无法看到显示的图片,作用是一直等待,直到有按键按下,才会销毁创建的界面

七、销毁所有窗口函数: cv2.destroyAllWindows()

用来删除窗口的,()里不指定任何参数,则删除所有窗口,删除特定的窗口,往()输入特定的窗口值

八、BGR转换为RGB函数:cv2.cvtColor(img,cv2.COLOR_BGR2RGB)

将图片由BGR转换为RGB

3.图片的读取和显示

import cv2 #引入库
 
img = cv2.imread('D:\opencvdata\lena.jpg')  # bgr  D:\opencvdata\lena.jpg为需要读取图片的路径

cv2.imshow('img1',img)#第一个参数为窗口名称,第二个参数为要显示的图片
cv2.waitKey(0)#少了就无法看到显示的图片,作用是一直等待,直到有按键按下,才会销毁创建的界面
cv2.destroyAllWindows()

在这里插入图片描述
可以看到图片成功的显示出来了!

4.读取图像的方式

import cv2

img = cv2.imread('D:\opencvdata\lena.jpg',0)  # bgr
img2 = cv2.imread(r'D:\opencvdata\noise.png',1)

cv2.imshow('img1',img)
cv2.imshow('img2',img2)


cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述
从这里可以看到imread()函数第二个参数为0时显示灰色,为1时显示彩色。
另外

img2 = cv2.imread(r'D:\opencvdata\noise.png',1)

可以看到图片路径有个r这是因为出现了\n转义字符,加上r就是原始路径!

5.显示图像的方式

我们再用matplotlib.pyplot 显示一下

import cv2
import matplotlib.pyplot as plt
img = cv2.imread('D:\opencvdata\lena.jpg')  # bgr
plt.imshow(img)  #rgb
plt.show()

在这里插入图片描述
可以看到这里图片为蓝色,变成阿凡达了🎽🎽!
这是因为cv2.imread('D:\opencvdata\lena.jpg') 读取的三个信道为bgr
而plt.imshow(img) 显示的三个信道为rgb
所以要正确显示要将BGR转换为RGB!

6.BGR与RGB之间的转换

通道初识

我们来简单认识一下通道
以这张图片为例:
在这里插入图片描述

import cv2


img = cv2.imread('D:\opencvdata\lena.jpg',1)

print(img.shape)

输出结果为:(350,500,3)
从中可以看出这是一个高350宽500(350x500),信道为3的图片


print(img.size)

输出结果为:525000,即像素为(350x500x3)525000

print(img.dtype)

输出结果为:uint8

那么我们可以将通道拆分,输出单通道

import cv2


img = cv2.imread('D:\opencvdata\lena.jpg',1)


cv2.imshow('img',img)

b,r,g = cv2.split(img)

cv2.imshow('b',b)
cv2.imshow('r',r)
cv2.imshow('g',g)


cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述
可以看到三个单通道图片的亮度不同

方法1

img = img[:,:,::-1]
cv2.imread('D:\opencvdata\lena.jpg')读取为三维数组最后一个维度为三个信道的数组,所以将这个数组倒序即可

这样BGR就转换为RGB!


import cv2
import matplotlib.pyplot as plt
img = cv2.imread('D:\opencvdata\lena.jpg')  # bgr
img = img[:,:,::-1]
plt.imshow(img)  #rgb
plt.show()

在这里插入图片描述
可以看到显示正常。

方法2

b,g,r = cv2.split(img)
通道拆分
img = cv2.merge([r,g,b])
通道合并

import cv2
import matplotlib.pyplot as plt
img = cv2.imread('D:\opencvdata\lena.jpg')  # bgr
b,g,r = cv2.split(img)
img = cv2.merge([r,g,b])
plt.imshow(img)  #rgb
plt.show()

在这里插入图片描述

方法3

img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)

import cv2
import matplotlib.pyplot as plt
img = cv2.imread('D:\opencvdata\lena.jpg')  # bgr
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
plt.imshow(img)  #rgb
plt.show()

在这里插入图片描述

7.保存图像

保存图像的一个单通道图像

import cv2

img = cv2.imread('D:\opencvdata\lena.jpg',1)
cv2.imshow('img',img)

b,g,r = cv2.split(img)

cv2.imwrite('r.jpg',r)

cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

8.读取视频

(1)捕获摄像头;

函数: capture = cv2.VideoCapture(path)
参数:可以是电脑自带摄你头0,1,2;
视频地址;网络摄像头。

(2)读取视频每一帧图像数据;

函数: ret, frame = capture.read()
说明: ret:读取成功则返,True,读取失败返回Falseframe:每一帧图像

(3)释放资源,销毁窗口。

cap.release() # 释放资源
cv2.destroyAllWindows()

9.读取自带的摄像头

import cv2

cap = cv2.VideoCapture(0)

if cap.isOpened():
    print("捕获成功")
    while True:
        ret,frame = cap.read()
        if ret:
            cv2.imshow('video',frame)
            if cv2.waitKey(5) ==27:
                break
        else:
            break
else:
    print("捕获失败")

cap.release() # 释放资源
cv2.destroyAllWindows()

在这里插入图片描述

10.读取视频

#读取视频
import cv2
path = r'D:\opencvdata\car.mp4'
cap = cv2.VideoCapture(path)

if cap.isOpened():
    print("捕获成功")
    while True:
        ret,frame = cap.read()
        if ret:
            cv2.imshow('video',frame)
            if cv2.waitKey(5) ==27:
                break
        else:
            break
else:
    print("捕获失败")

cap.release() # 释放资源
cv2.destroyAllWindows()

在这里插入图片描述

11.读取网络摄像头

import cv2

rtsp = r'rtsp://admin:admin123456@192.168.6.48'
cap = cv2.VideoCapture(rtsp)

if cap.isOpened():
    print("捕获成功")
    while True:
        ret,frame = cap.read()
        if ret:
            cv2.imshow('video',frame)
            if cv2.waitKey(5) ==27:
                break
        else:
            break
else:
    print("捕获失败")

cap.release() # 释放资源
cv2.destroyAllWindows()

在这里插入图片描述

总结:

学习心得和体会

第一节课初识OpenCV简单操作,了解了图片的读取和显示以及BGR与RGB之间的转换,以及读取视频和摄像头

遇到的问题和解决方案

问题1

报错:libpng warning: iCCP: cHRM chunk does not match sRGB
解决方案:因为我使用的是QQ输入法,在运行代码时切换为电脑自带的输入法即可。

问题2

在这里插入图片描述

Cannot find reference 'imread' in '__init__.py' more

虽然不影响结果,但是缺少代码提示十分不方便😤,也尝试了许多方法,例如降低版本

pip install -i https ://pypi.douban.com/simple opencv-python==4.5.4.62

安装增强版

pip install opencv-contrib-python

安装虚拟环境等都未解决😭😭
最终😁😀
先卸载
pip uninstall opencv-python
再次安装
pip install opencv-python
就好了
可能每个人的情况都不同,多试几种就好了🤡🤡

目录
相关文章
|
8月前
|
机器学习/深度学习 人工智能 监控
利用Python和OpenCV实现实时人脸识别系统
【8月更文挑战第31天】本文将引导您了解如何使用Python结合OpenCV库构建一个简易的实时人脸识别系统。通过分步讲解和示例代码,我们将探索如何从摄像头捕获视频流、进行人脸检测以及识别特定个体。本教程旨在为初学者提供一条明晰的学习路径,帮助他们快速入门并实践人脸识别技术。
|
8月前
|
机器学习/深度学习 算法 机器人
|
8月前
|
人工智能 搜索推荐 测试技术
基于人工智能的代码分析与 Bug 检测实战
在人工智能(AI)尚未普及之时,检测程序错误主要依赖单元测试、代码扫描工具如SonarQube和FindBugs,以及人工集成测试。如今,AI技术显著提升了这一过程的效率,不仅能辅助开发者编写更高质量的代码,还能在单元测试与集成测试阶段提供支持,如通过Copilot+Codex优化单元测试,或利用ChatGPT等工具自动化生成测试脚本。本章将介绍如何运用AI工具识别三种常见错误:代码执行异常、未满足需求及变量命名不当,并通过实例演示Copilot如何高效定位并修正这些问题。
|
9月前
|
机器学习/深度学习 人工智能 Shell
人工智能平台PAI操作报错合集之在分布式训练过程中遇到报错,是什么原因
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
9月前
|
机器学习/深度学习 人工智能 数据处理
人工智能平台PAI操作报错合集之任务重启后出现模型拆分报错,该怎么办
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
9月前
|
机器学习/深度学习 人工智能 分布式计算
人工智能平台PAI操作报错合集之引用github.com/alibaba/pairec包时报错,该如何解决
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
9月前
|
机器学习/深度学习 人工智能 网络协议
人工智能平台PAI操作报错合集之报错 "curl: (35) TCP connection reset by peer" 表示什么
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
9月前
|
计算机视觉 人工智能
人工智能问题之人脸识别团队决定使用LangChain来构建一个智能排查助手如何解决
人工智能问题之人脸识别团队决定使用LangChain来构建一个智能排查助手如何解决
76 1
|
9月前
|
机器学习/深度学习 人工智能 计算机视觉
好的资源-----打卡机+Arm+Qt+OpenCV嵌入式项目-基于人脸识别的考勤系统-----B站神经网络与深度学习,商城
好的资源-----打卡机+Arm+Qt+OpenCV嵌入式项目-基于人脸识别的考勤系统-----B站神经网络与深度学习,商城
|
9月前
|
机器学习/深度学习 人工智能 监控
人工智能之人脸识别技术应用场景
人脸识别技术是一种通过计算机技术和模式识别算法来识别和验证人脸的技术。它可以用于识别人脸的身份、检测人脸的表情、年龄、性别等特征,以及进行人脸比对和活体检测等应用。
519 1

热门文章

最新文章