OpenCVの基本(Python編):opencvを使った画像操作の詳細版

1.OpenCVのインストール

   opencv関連の操作はpythonをベースに実装していますが、opencvのインストールは比較的簡単なのでここでは説明しません。

2. Opencvイメージの操作

前提条件をインポートする必要があります: cv2 module----->import cv2

1. imread関数

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

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

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

3. 画像をキャプチャする (カメラ、ビデオカメラ)

1.ビデオキャプチャ機能

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

2. isOpened関数

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

3. 読み取り機能

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

原型:
	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の描画

  OpenCV の描画機能は、顔認識プロジェクトでもよく使用されています。たとえば、校門の顔認識システムでは、顔全体を識別するために長方形のフレームまたは円がよく使用されます。フレーム化の主な目的は、顔の特徴を識別することです。このセクションでは、画像上に線、円、長方形、テキストなどを描画する方法を説明します。

このセクションで注意が必要な点は次のとおりです。
(1)img图像参数:该参数是需要绘制形状的图像
(2)color颜色参数:形状的颜色,对于RGB三通道彩色来说,将作为元组进行传递,例如:(255,0,0),对于灰度来说,只需要传递标量值即可
(3)thickness厚度参数:线或圆等的粗细,对于闭合图形来说如果传递值为-1,它将表示填充形状,默认厚度=1
(4)lineType线性参数:线的类型,是否为8连接线,抗锯齿形等,默认情况下,为8连接线

1. 直線を引く

原型:
	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. 円を描く

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

3. テキストを描画する

原型:
	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. 長方形を描く

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

5. 楕円を描く

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

おすすめ

転載: blog.csdn.net/Mr_zhang1911116/article/details/128205620