本人是基于python实现opencv的相关操作,opencv安装相对来说非常简单,本人这里不作叙述。
前提需要导入:cv2模块----->import cv2
原型:
def imread(filename , flags=None)
解释:
该函数是从文件路径filename中读取图片,并返回,成功则返回图像,失败则返回一个空矩阵
参数:
(1)filename
该参数指定图片的路径
(2)flags
该参数指定以哪种方式读取图片
有以下3个取值
a、cv2.IMREAD_COLOR
读取一副彩色图片,图片的透明度被忽略
b、cv2.IMREAD_GRAYSCALE
以灰度形式读取图片
c、cv2.IMREAD_UNCHANGED
读取一副彩色图片,透明度不会被忽略
例如;
import cv2
img=cv2.imread("zhang.jpg",flags=cv2.IMREAD_COLOR)
原型:
def imshow(windowname,photo)
解释:
将图片photo显示在窗口windowname中
参数:
(1)windowname
窗口名,它是一个字符串
(2)photo
它是我们读取的图片
例如:
import cv2
img=cv2.imread("zhang.jpg",flgas=cv2.IMREAD_COLOR)
cv2.imshow("图片",img)
cv2.waitKey(0)
原型:
def imwrite(filename,photo)
解释:
将图片photo保存到filename下
参数:
(1)filename
文件的路径及保存图片的格式
(2)photo
需要保存的图片
例如:
imwrite(“./photo/zhang.jpg”,img)#将图片img以zhang.jpg保存到当前目录中photo下
原型:
def VideoCapture(int)
解释:
该函数用于捕获摄像头,成功则返回True,失败则返回False
参数:
(1)int
int表示用户选择的是第几个摄像头或摄像机(默认为0或-1表示捕获第1个摄像机)
例如:
flag=cv2.VideoCapture(0) #打开成功则返回True,打开失败则返回False
原型:
def isOpened()
解释:
判断摄像机是否打开成功,打开成功则返回True,打开失败则返回False
例如:
flag=cv2.VideoCapture(0)
flag1=flag.isOpened()#打开成功,则返回True,打开失败,则返回False
原型:
def read()
解释:
该函数用于读取摄像头的图像,该函数返回两个值,一个值是bool类型,一个值是读取的图像
例如:
cap=cv2.VideoCapture(0)
flag , img =cap.read() #读取摄像头的图像,成功则给flag返回True,并把读取到的图像存入到img中,失败则给flag返回False
******************************练习1:获取windows摄像头并实时显示图像界面********************************
mport numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
# if not cap.isOpened(): #该程序主要是判断windows摄像头有没有被捕获到
# print("Cannot open camera")
# exit()
while True:
# 逐帧捕获
ret, frame = cap.read() #注:read函数必须有两个返回值,一个是返回bool值,一个是返回读取到的图像
# 如果正确读取帧,ret为True
# if not ret:
# print("Can't receive frame (stream end?). Exiting ...")
# break
# gray=cv.cvtColor(frame, cv.COLOR_BGR2GRAY)#进行灰度转换,根据实际情况需要进行增删
# # 显示结果帧e
# cv.imshow('frame', gray)
cv.imshow("window",frame) #将读取到的图像显示到界面上
if cv.waitKey(1) == ord('q'): #waitkey(1)这行代码必须要加上,不然使用前面的imshow函数会一直处于卡顿状态,无法显示图像
break
cap.release() #释放捕获的摄像头
cv.destroyAllWindows() #破坏所有的窗口
******************************练习2:从文件中获取视频图像の并实时显示图像界面********************************
import numpy as np
import cv2 as cv
cap = cv.VideoCapture('vtest.avi') #从文件中捕获视频图像需要将VideoCapture函数中的参数改为对应路径下的视频文件名即可
while cap.isOpened():
ret, frame = cap.read()
# 如果正确读取帧,ret为True
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
cv.imshow('frame', gray)
if cv.waitKey(1) == ord('q'):
break
cap.release()
cv.destroyAllWindows()
原型:
def imwrite(photoRoad,photo) #注,该函数保存图像的同时可以更改图片的名称等等(用字符串的拼接即可实现)
参数:
(1)参数photoRoad为图片的路径
(2)参数photo为捕获的图像
解释:
该函数用于保存捕获的图像
**********************练习3:捕获windows摄像头并捕获摄像头采集的图像********************
import cv2
#摄像头
cap=cv2.VideoCapture(0)
num = 1
while(cap.isOpened()):#检测是否在开启状态
ret_flag, Vshow = cap.read() # 得到每帧图像
cv2.imshow("Capture_Test", Vshow) # 显示图像
k=cv2.waitKey(1)
if k == ord('s'):
cv2.imwrite("C:/Users/lenovo/Desktop/opencv_example/photos/"+str(num)+'.123'+'.jpg',Vshow) #按字母s即可保存图像
print("success to save"+str(num)+".jpg")
print("-------------------")
num+=1
elif k == ord(' '):
break
cap.release()
cv2.destroyAllWindows()
OpenCV中的绘图功能也是在人脸识别项目中用得非常之多,例如,大家校门口的人脸识别系统往往在识别你的人脸的时候会将你的整个脸用矩形框或者是圆形框圈起来,最主要的目的是需要识别用矩形框或者圆形框框起来的人脸特征,所以本节会叫你如何在图像上去绘制线段、圆圈、矩形、文本等等
(1)img图像参数:该参数是需要绘制形状的图像
(2)color颜色参数:形状的颜色,对于RGB三通道彩色来说,将作为元组进行传递,例如:(255,0,0),对于灰度来说,只需要传递标量值即可
(3)thickness厚度参数:线或圆等的粗细,对于闭合图形来说如果传递值为-1,它将表示填充形状,默认厚度=1
(4)lineType线性参数:线的类型,是否为8连接线,抗锯齿形等,默认情况下,为8连接线
原型:
cv.line(img,start,end,color,thickness)
参数:
(1)img:要绘制直线的图像
(2)start:直线的起点
(3)end:直线的终点
(4)color:线条的颜色
(5)thickness:线条的宽度
***************************绘制直线实例(圆、椭圆、矩形等大家可以依葫芦画瓢)******************************
import cv2
#第一步首先需要读取一张图像
img=cv2.imread("C:/Users/lenovo/Desktop/opencv_example/photos/peng.jpg")
while True:
cv2.line(img, (0, 0), (50, 50), (255, 0, 0), 2) #注彩色图有RGB三个通道所以传递时以(255,0,0)形式传递参数
cv2.imshow("window",img)
if cv2.waitKey(1)==ord('q'):
break
原型:
cv.circle(img,centerpoint,r,color,thickness)
参数:
(1)img:要绘制原型的图像
(2)centerpoint:圆的圆心
(3)r:圆的半径
(4)color:圆的半径
(5)thickness:圆的线条宽度,如果为-1则生成闭合图案并填充颜色
原型:
cv.putText(img,text,station,font,fontsize,color,thickness,cv.LINE_AA)
(1)img:需要绘制文本的图像
(2)text:文本数据
(3)station:绘制的文本放置的位置
(4)font:绘制的文本的字体
(5)fontsize:绘制的文本的字体的大小
(6)color:绘制的文本的颜色
(7)thickness:绘制的文本的宽度
(8)cv.LINE_AA:线性,默认参数为cv.LINE_AA
原型:
cv.rectangle(img,start vertex,end vertex,color,thickness)
参数:
(1)img:需要绘制矩形的图像
(2)start vertex:绘制的矩形的左上角顶点
(3)end vertex:绘制的矩形的右上角顶点
(4)color:绘制的矩形的线的颜色
(5)thickness:绘制的矩形的线的宽度,-1表示填充
原型:
cv.ellipse(img,centerpoint,axeslenth,angle,startangle,endangle,color,thickness)
参数:
(1)img:需要绘制椭圆的图像
(2)centerpoint:椭圆的中心点
(3)axeslength:包含椭圆的长轴长度和短轴长度
(4)angle:椭圆的旋转角度,以度为单位
(5)startangle:椭圆的起始角度,以度为单位
(6)endangle:椭圆的结束角度,以度为单位
(7)color:绘制的椭圆的边界线的颜色
(8)thickness:绘制椭圆的边界线的宽度,-1代表填充