赞
踩
opencv是一个开源的计算机视觉库,可以在http://opencv.org获取,opencv库用C,C++,python等多种语言编写,在使用中,经常用opencv打开存储器的图像,对摄像头的图像进行捕捉并保存或者对图像进行预处理,以实现图像更好的额完成算法分类,应用领域很广:在人机互动,物体识别,图像分割,人脸识别,动作识别,运动跟踪,机器人,运动分析,机器视觉,汽车安全驾驶等方面都有涉及。
1.对于只有黑白颜色的灰度图,为单通道,一个像素块对应矩阵中一个数字,数值为0-255,0表示最暗(黑色),255表示最亮(白色)
2.对于采用RGB模式的彩色图片,则为三通道图,RED,GREEN,BLUE三原色,按照不同比例相加,一个像素块对应矩阵中一个向量
注意:
彩色图像的三维矩阵
第一轴轴长:图片宽度
第二轴轴长:图片高度
第三轴轴长:图片深度opencv采用BGR模式,而不是RGB所以
第一轴轴长:图片高度
第二轴轴长:图片宽度
第三轴轴长:图片深度
1.读取图像,并显示
- import cv2
- # 读取本地某个路径下的图片文件,返回值为numpy中的ndarray类型
- img = cv2.imread("1.JPG")
- print(type(img))
- print(img.shape)
-
- # 显示img对象中的图片
- cv2.imshow("1", img)
-
- # 阻塞等待任意按键按下,再退出;参数代表永久阻塞
- # 返回值表示按下按键的key值
- cv2.waitKey(0)
- # 退出时销毁该窗口
- cv2.destroyAllWindows()
2.图片的变换
在人工智能对图片进行处理时提取特征值时往往需要灰度图,所以我们需要对图片进行一些处理。
- """
- 2.图片的变换
- """
- img = cv2.imread("1.JPG")
- print(type(img))
- print(img.shape)
- cv2.imshow("1", img)
- # 由于img为彩色图像数据,而人工智能特征值提取,需要灰度图
- # 将 bgr格式的彩图转换为灰度图
- gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
- # resize():改变图片大小,实质是压缩
- gray = cv2.resize(gray, (480, 640))
- print(gray)
- print(gray.shape)
- cv2.imshow("2", gray)
-
- cv2.waitKey(0)
- cv2.destroyAllWindows()
3.图像截取,抠图
图像截图抠图本质上也是对图像对应的numpy数组进行索引切片得到相应的部分
- """
- 3.图像截取,抠图
- """
- img = cv2.imread("1.JPG")
- print(type(img))
- print(img.shape)
- cv2.imshow("1", img)
- # # 索引切片进行抠图
- eyes = img[480: 480+94, 640: 640+118, :]
- cv2.imshow("2", eyes)
- # # 将图片数据写入本地文件
- cv2.imwrite("eyes.jpg", eyes)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
4.opencv操作摄像头
- import cv2
- """
- 4.opencv操作摄像头
- """
- # 打开摄像头0
- cap = cv2.VideoCapture(0)
- if not cap.isOpened():
- print("摄像头未打开")
- exit(0)
- while True:
- # 读取一帧图片
- ret, img = cap.read()
- print(img)
- cv2.imshow("1", img)
- if cv2.waitKey(50) == 27:
- break
- cv2.destroyAllWindows()
5.opencv操作摄像头,显示文字,画框
putText()
参数1:图片数据对象
参数2:显示的文本数据
参数3:文本显示位置参数4:文本字体样式
参数5:字体的大小参数6:字体的颜色rgb
参数7:文字的线条粗细rectangle():绘制矩形框
- """
- 5.opencv操作摄像头,显示文字,画框
- """
- import time
- # # 打开摄像头0
- time_start = time.time()
- cap = cv2.VideoCapture(0)
- if not cap.isOpened():
- print("摄像头未打开")
- exit(0)
- while True:
- # 读取一帧图片
- ret, img = cap.read()
- # 参数1:图片数据对象 参数2:显示的文本数据
- # 参数3:文本显示位置 参数4:文本字体样式
- # 参数5:字体的大小 参数6:字体的颜色rgb
- # 参数7:文字的线条粗细
- cv2.putText(img, "FPS", (240, 320), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color=(0, 123, 220), thickness=2)
- # 绘制矩形框,pt1:矩形框左下角点坐标,pt2矩形框右下角点坐标
- cv2.rectangle(img, pt1=(270, 190), pt2=(370, 290), color=(0, 0, 0), thickness=5)
- cv2.imshow("1", img)
- if cv2.waitKey(50) == 27:
- break
- cv2.destroyAllWindows()
6.opencv人脸检测
path是我们使用人脸检测库文件的文件路径位置,通过库的支持我们将每一帧的图片进行比对得到人脸的坐标,然后通过绘制矩形,达到人脸识别的效果。
- """
- 6.opencv人脸检测
- """
- path = 'D:\\anaconda\\envs\\tf\\Library\\etc\\haarcascades\\haarcascade_frontalface_default.xml'
-
- model = cv2.CascadeClassifier(path)
- cap = cv2.VideoCapture(0)
- if not cap.isOpened():
- print("摄像头未打开")
- exit(0)
- while True:
- ret, img = cap.read()
- print(img.shape)
- # 由于该模型,要求图片必须是灰度图,所以必须转换
- gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
- # 将灰度图送入模型进行检测,返回列表,列表中元素为每个人脸的位置信息【x, y, w, h】
- facelist = model.detectMultiScale(gray)
- if len(facelist) < 0:
- print("未检测到")
- cv2.waitKey(100)
- break
- print(facelist)
- for i in facelist:
- x, y, w, h = i
- cv2.rectangle(img, pt1=(x, y), pt2=(x + w, y + h), color=(0, 0, 0), thickness=2)
- cv2.imshow("1", img)
- if cv2.waitKey(50) == 27:
- break
- cv2.destroyAllWindows()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。