本文为笔者近期学习opencv的学习笔记。基本跟着OpenCV 4.0 中文文档来学习。
系统:windows10
IDE:: pycharm
参考文献 :https://opencv.apachecn.org/#/docs/4.0.0/2.1-tutorial_py_image_display
使用该函数来读取图片,可以有如下示例:
import cv2
# 用灰度模式加载图像
img = cv2.imread(r'F:\pythonProject\material\vivid_1.jpg', 0)
其中,第一个参数(引号部分)是图像的位置。第二个参数是一个标志,表示以何种形式来读取图像。
第二个参数的1,0,-1分别对应下列各个模式:
1 :cv2.IMREAD_COLOR:加载彩色图像,任何图像的透明度都会被忽略,它是默认标志
0 :cv2.IMREAD_GRAYSCALE:以灰度模式加载图像
-1 :cv2.IMREAD_UNCHANGED:加载图像,包括 alpha 通道
有如下示例:
cv2.imshow('image', img)
第一个参数是创建的窗口名称,第二个参数是显示的图像的数据。
import cv2
img = cv2.imread(r'F:\pythonProject\material\vivid_1.jpg')
cv2.imwrite(r'F:\pythonProject\material\vivid_3.jpg',img)
用imread以默认模式读取图片,用imwrite保存图片。
cv2.write()中的第一个参数是保存文件的地址与名称,第二个参数是读取图片的信息。
等待用户键盘输入值。
例如:
cv2.waitKey(0)
如果用户没有按下键,则继续等待
见 : 设置 waitKey(0) , 则表示程序会无限制的等待用户的按键事件
# 等待用户的输入,期间停止1ms
c = cv2.waitKey(1)
# 如果用户输入esc则退出
if c == 27:
break
等待用户输入对应特定ASCII码的数,然后退出循环。
销毁我们创建的所有窗口。可以用作销毁特定的窗口。
该函数取一个像素点周围的方阵点来对该点像素进行计算,具体的原理可以部分参考下面的链接:https://blog.csdn.net/weixin_40922285/article/details/102801633
这个时候应该会涉及到“卷积”这一个词了,关于这个词的解释推荐下面的视频链接:https://www.bilibili.com/video/BV1VV411478E/?spm_id_from=333.337.search-card.all.click&vd_source=ae33eae3c765a935fff56de0aa3c4fae
该函数取一个像素点周围的方阵点来对该点像素进行计算,具体的原理可以部分参考下面的链接:https://blog.csdn.net/weixin_40922285/article/details/102801633
这个时候应该会涉及到“卷积”这一个词了,关于这个词的解释推荐下面的视频链接:https://www.bilibili.com/video/BV1VV411478E/?spm_id_from=333.337.search-card.all.click&vd_source=ae33eae3c765a935fff56de0aa3c4fae
参考链接:https://blog.csdn.net/qq_49478668/article/details/123342188
VideoCapture()中参数是0,表示打开笔记本的内置摄像头,参数是视频文件路径则打开视频
例如下面的示例:
cap = cv2.VideoCapture(0)
cap = cv2.VideoCapture(r'F:\pythonProject\material\vd_vi_1.mp4')
ret, frame = cap.read()返回值含义:
参数ret 为True 或者False,代表有没有读取到图片,可以用来判断是否到达视频结尾。
第二个参数frame表示截取到一帧的图片
参考文献链接:https://blog.csdn.net/duwangthefirst/article/details/79956616
图片文件的转换,将颜色进行更改,实质是改变多维数组的值或者维度。
例如将图片转化为黑白:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
将frame图片另存为黑白的gray图片
画直线代码示例:
cv2.line(img,(0,0),(511,511),(255,0,0),5)
第一个参数是图像对象
第二个参数是起始像素点的坐标
第三个参数是终止像素点的坐标
第四个参数是RGB的数值,即颜色
第五个参数是线的宽度
画矩形代码示例:
cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
第一个参数是图像对象
第二个参数是左上顶点像素点的坐标
第三个参数是右下顶点像素点的坐标
第四个参数是RGB的数值,即颜色
第五个参数是线的宽度
参考链接:https://blog.csdn.net/viven_hui/article/details/102807995
画圆代码示例:
cv2.circle(img,(447,63), 63, (0,0,255), -1)
第一个参数是图像对象
第二个参数是圆形中点坐标
第三个参数是半径长度(以一像素点为单位长度)
第四个参数是RGB的数值,即颜色
第五个参数是线的宽度,若值为负,则其为实心圆
该函数找寻图像中一切符合Harris角的像素点。
下面转载opencv中文文档:
OpenCV 中的 cv.cornerHarris() 函数用来实现 Harris 角点检测。它的参数是:
img - 输入图像,应为 float32 类型的灰度图。
blockSize - 角点检测所考虑的邻域大小。
ksize - Sobel 导数的内核大小。
k - Harris 检测器方程中的自由参数。
代码示例:
dst = cv.cornerHarris(gray,2,3,0.04)
# 导入opencv库
import cv2
# 打开摄像头
camera = cv2.VideoCapture(0)
# 读取写录特征文件
face_casecade = cv2.CascadeClassifier(r'F:\pythonProject\cater_mydear\haarcascade_frontalface_default.xml')
while (True):
# 保证有图像返回
ret, frame = camera.read()
if ret:
# frame为三维RGB图像,将其改为gray_img二位灰度图像
gray_img = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
face = face_casecade.detectMultiScale(gray_img, 1.3, 3)
for (x, y, w, h) in face:
# 画矩形框 左上顶点坐标 右下顶点坐标 矩形框的颜色 矩形框的边框厚度
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)
# 显示矩形中心位置
print("(x:", (x * 2 + w) / 2, ",y:", (y * 2 + h) / 2, ")")
cv2.imshow("camera", frame)
key_boom = cv2.waitKey(1)
if key_boom == 27 :
break
# 释放摄像头占用
camera.release()
# 关闭所有窗口
cv2.destroyAllWindows()
# 本案例用来提取和显示图片
import cv2
# 用灰度模式加载图像
img = cv2.imread(r'F:\pythonProject\material\vivid_1.jpg', 0)
# 显示图像
cv2.imshow('image', img)
# 另存图像
cv2.imwrite(r'F:\pythonProject\material\vivid_3.jpg',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
该案例中,可以选用多种模式读取图片,下面是不同模式的对比,只需要改变第四行代码中第二个参数的值便可以完成多种模式的选取。下列图像分别对应着 原图,1.0.-1模式图像
import cv2
import numpy as np
img = cv2.imread(r'F:\pythonProject\material\vivid_1.jpg')
ipk = cv2.imread(r'F:\pythonProject\material\vivid_1.jpg')
sum_img = np.hstack([img,ipk])
cv2.imshow('image_1', sum_img)
cv2.waitKey(0)
cv2.destroyWindows('image_1')
import cv2
import numpy as np
img = cv2.imread(r'F:\pythonProject\material\vivid_1.jpg')
ipk = cv2.imread(r'F:\pythonProject\material\vivid_1.jpg',0)
cv2.namedWindow("image_1", cv2.WINDOW_NORMAL)
cv2.resizeWindow('image_1', 500, 1000)
cv2.imshow('image_1', img)
cv2.namedWindow("image_2", cv2.WINDOW_NORMAL)
cv2.resizeWindow('image_2', 500, 1000)
cv2.imshow('image_2', ipk)
cv2.waitKey(0)
cv2.destroyALLWindows()
如下显示:
import numpy as np
import cv2
cap = cv2.VideoCapture(r'F:\pythonProject\material\vd_vi_1.mp4')
# 获取视频帧率并打印
fps = cap.get(cv2.CAP_PROP_FPS)
print(fps)
while(True):
# 一帧一帧捕捉
ret, frame = cap.read()
# 我们对帧的操作在这里,可以将图片在这一步进行处理,本案例没有处理
gray = frame
# 显示返回的每帧
cv2.imshow('frame',gray)
if cv2.waitKey(3) & 0xFF == ord('q'):
break
# 当所有事完成,释放 VideoCapture 对象
cap.release()
cv2.destroyAllWindows()
import numpy as np
import cv2
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
# 读取图像信息
img = cv.imread(r'F:\pythonProject\material\vivid_1.jpg',-1)
# 输出的像素点信息 求取5*5矩阵内的平均值
kernel = np.ones((5,5),np.float32)/25
# 新图像
dst = cv.filter2D(img,-1,kernel)
# 绘制展示窗口
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(dst),plt.title('Averaging')
plt.xticks([]), plt.yticks([])
plt.show()
import cv2
# 分类器导入
face_casecade = cv2.CascadeClassifier(r'F:\pythonProject\cater_mydear\haarcascade_frontalface_default.xml')
img = cv2.imread(r'F:\pythonProject\material\lcx_ss.jpg')
# gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
face = face_casecade.detectMultiScale(img, 1.3, 3)
for (x, y, w, h) in face:
# 画矩形框 左上顶点坐标 右下顶点坐标 矩形框的颜色 矩形框的边框厚度
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)
cv2.imshow('ss',img)
cv2.waitKey(0)
import cv2 as cv
for i in range(1,28):
img = cv.imread('F:\\pythonProject\\material\\log_data\\tre\\'+ str(i) + '.jpg')
try:
img = cv.resize(img, (416, 312))
cv.imshow('sd',img)
cv.waitKey(0)
cv.destroyAllWindows()
except:
print('NO FOUND')
import cv2
import os
import numpy as np
def read_path(file_pathname):
#遍历该目录下的所有图片文件
i = 1
for filename in os.listdir(file_pathname):
print(filename)
img = cv2.imdecode(np.fromfile(file_pathname+'\\'+filename, dtype=np.uint8), cv2.IMREAD_UNCHANGED)
img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
image_np=cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
img1 = cv2.resize(image_np, (40, 40))
#####save figure
cv2.imwrite('F:\\pythonProject\\pos\\' + str(i) + '.jpg', img1) # 保存图片
i = i + 1
read_path("F:\\pythonProject\\material\\log_data\\tre")
#print(os.getcwd())
ASCII码速查:https://www.asciim.cn/