OpenCV basics (python version): Detailed version about using opencv to operate images

1. Opencv installation

   I implement opencv-related operations based on python. The installation of opencv is relatively simple, so I will not describe it here.

2. Operation of Opencv images

The prerequisite needs to be imported: cv2 module----->import cv2

1. imread function

原型:
	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)

2. imshow function

原型:
	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)

3. imwrite function

原型:
	def imwrite(filename,photo)
解释:
	将图片photo保存到filename下
参数:
(1)filename
	文件的路径及保存图片的格式
(2)photo
	需要保存的图片
例如:
	imwrite(“./photo/zhang.jpg”,img)#将图片img以zhang.jpg保存到当前目录中photo下

3. Capture images (camera, video camera)

1. VideoCapture function

原型:
	def VideoCapture(int)
解释:
	该函数用于捕获摄像头,成功则返回True,失败则返回False
参数:
(1int
	int表示用户选择的是第几个摄像头或摄像机(默认为0-1表示捕获第1个摄像机)
例如:
	flag=cv2.VideoCapture(0)   #打开成功则返回True,打开失败则返回False

2. isOpened function

原型:
	def isOpened()
解释:
	判断摄像机是否打开成功,打开成功则返回True,打开失败则返回False
例如:
	flag=cv2.VideoCapture(0)
	flag1=flag.isOpened()#打开成功,则返回True,打开失败,则返回False

3. read function

原型:
	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()

4. imwrite function

原型:
	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()

4. OpenCV drawing

  The drawing function in OpenCV is also used a lot in face recognition projects. For example, the face recognition system at our school gate often uses a rectangular frame or a circle to identify your entire face. The main purpose of framing is to identify facial features framed by rectangular or circular frames, so this section will teach you how to draw lines, circles, rectangles, text, etc. on images

Several points that need attention in this section are as follows:
(1)img图像参数:该参数是需要绘制形状的图像
(2)color颜色参数:形状的颜色,对于RGB三通道彩色来说,将作为元组进行传递,例如:(255,0,0),对于灰度来说,只需要传递标量值即可
(3)thickness厚度参数:线或圆等的粗细,对于闭合图形来说如果传递值为-1,它将表示填充形状,默认厚度=1
(4)lineType线性参数:线的类型,是否为8连接线,抗锯齿形等,默认情况下,为8连接线

1. Draw a straight line

原型:
	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

2. Draw a circle

原型:
	cv.circle(img,centerpoint,r,color,thickness)
参数:
(1)img:要绘制原型的图像
(2)centerpoint:圆的圆心
(3)r:圆的半径
(4)color:圆的半径
(5)thickness:圆的线条宽度,如果为-1则生成闭合图案并填充颜色

3. Draw text

原型:
	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

4. Draw a rectangle

原型:
	cv.rectangle(img,start vertex,end vertex,color,thickness)
参数:
(1)img:需要绘制矩形的图像
(2)start vertex:绘制的矩形的左上角顶点
(3)end vertex:绘制的矩形的右上角顶点
(4)color:绘制的矩形的线的颜色
(5)thickness:绘制的矩形的线的宽度,-1表示填充

5. Draw an ellipse

原型:
	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代表填充

Guess you like

Origin blog.csdn.net/Mr_zhang1911116/article/details/128205620