Conceptos básicos de OpenCV (versión Python): versión detallada sobre el uso de opencv para operar imágenes

1. Instalación de Opencv

   Implemento operaciones relacionadas con opencv basadas en Python. La instalación de opencv es relativamente simple, por lo que no la describiré aquí.

2. Operación de imágenes Opencv

Es necesario importar el requisito previo: módulo cv2----->importar cv2

1. función de lectura

原型:
	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. función mostrar

原型:
	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. función de escritura

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

3. Capturar imágenes (cámara, videocámara)

1. Función de captura de vídeo

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

2. función está abierta

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

3. función de lectura

原型:
	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. función de escritura

原型:
	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. Dibujo OpenCV

  La función de dibujo en OpenCV también se usa mucho en proyectos de reconocimiento facial. Por ejemplo, el sistema de reconocimiento facial en la puerta de nuestra escuela a menudo usa un marco rectangular o un círculo para identificar toda la cara. El propósito principal del encuadre es identificar los rasgos faciales. enmarcado por marcos rectangulares o circulares, por lo que esta sección le enseñará cómo dibujar líneas, círculos, rectángulos, texto, etc. en imágenes.

Varios puntos que necesitan atención en esta sección son los siguientes:
(1)img图像参数:该参数是需要绘制形状的图像
(2)color颜色参数:形状的颜色,对于RGB三通道彩色来说,将作为元组进行传递,例如:(255,0,0),对于灰度来说,只需要传递标量值即可
(3)thickness厚度参数:线或圆等的粗细,对于闭合图形来说如果传递值为-1,它将表示填充形状,默认厚度=1
(4)lineType线性参数:线的类型,是否为8连接线,抗锯齿形等,默认情况下,为8连接线

1. Dibuja una línea recta

原型:
	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. Dibuja un círculo

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

3. Dibujar texto

原型:
	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. Dibuja un rectángulo

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

5. Dibuja una elipse

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

Supongo que te gusta

Origin blog.csdn.net/Mr_zhang1911116/article/details/128205620
Recomendado
Clasificación