> 技术文档 > (进阶向)Python第十二期opencv的基础应用处理

(进阶向)Python第十二期opencv的基础应用处理

目录

1、opencv的安装与调用

2、图像的基本知识

3、图像的基本操作:

 3.1创建窗体:Windows一般自带窗体把图片以弹窗的方式显示图像(函数cv.show(\"窗口名\",调用图片参数名))

3.2读取图片:cv.read(\"文件路径\",读取方式),结果会以灰度图显示出来;

3.3 保存图像:cv.imwrite(“保存路径”,保存的图像)

3.4创建黑白图像与随机像素值:np.zero((高,宽,通道),dtype=np.uint8)

3.5图片的切片与裁剪 

 3.6 调整图像的大小cv.resize(图像,尺寸),将图片调整成我们想要的大小

3.7 图形的绘制,包括直线,矩形,圆形,文字(cv.line/circle/rectangle/putText)

4、读取视频cv.VideoCapture(路径),利用死循环来实现视频按帧数播放;


引言:这次来运用一个新的图像处理的一个软件库,里面可以将我们的图像与视频进行处理,使其通过python来导入我们的图片和视频,以及处理图片等;

1、opencv的安装与调用

————opencv我们可以通过前几期说过的方法进行安装,例如conda或者pip都可以。这里可以直接在pycharm下面输出程序的终端进行输入安装:pip instal -i Simple Index(这里是一个镜像,用于加快我们的安装速度用的)opencv-python(安装的是opencv-python不是opencv注意);调用直接用import导入即可,导入的方式是import cv2 as cv。

import cv2 as cv import numpy as np##在下面使用cv中的api方法,一般有opencv的地方就有numpy建议习惯性一起导入

2、图像的基本知识

————首先,我们要了解我们所知的图像颜色是如何构成的,RGB图像是指红绿蓝三原色,那么他们在图像中的表示就是red:(255,0,0),green(0,255,0),blue(0,0,255);而我们常见的黑白色则就是两个极端值,黑色(0,0,0),白色(255,255,255);颜色的范围便是(0~255),不会超过这个范围。看着这个表示方法就很像我们的矩阵表示法;因此numpy与opencv就是这样关联起来的;

示例:

 

————像美术生的调色盘也可以根据这种方式来调出新的颜色,因为三原色的值都可以改;因此每次出来的图像颜色都会有差别。

3、图像的基本操作:

————在图像操作之前需要准备的材料:一张图片,一个视频,保存到自创建的目录文件下, 方便调用,否则会存在找不到路径的问题;

 3.1创建窗体:Windows一般自带窗体把图片以弹窗的方式显示图像(函数cv.show(\"窗口名\",调用图片参数名))

import cv2 as cv import numpy as npimage1 = cv.imread(\"../image/1.jpg\")#调取图片cv.show(\"image1\",image)#弹窗显示当我们第一次打开时会秒关,因此我们需要设置一个延迟时间或者让他一直存在cv.waitkey(0)#表示一直存在cv.waitkey(5000)#表示会停留5s自动关闭cv.destroyAllWindows()#在每次结束时我们需要释放内存避免卡顿,如果你想一直看着图片,那就每次输出完之后加上这两行固定代码即可;

我们最后会输出这么一张图片,以image1表示的弹窗图像文件;

3.2读取图片:cv.read(\"文件路径\",读取方式),结果会以灰度图显示出来;

imimport cv2 as cvimport numpy as npimage = cv.read(\"../images/1.jpg\",cv.IMREAD.GRAYSCALE)#将图片以灰度图表示出来cv.show(\"image1\",image)

3.3 保存图像:cv.imwrite(“保存路径”,保存的图像)

import cv2 as cvimport numpy as npcv.imwrite(\"../images/1_gray.jpg\", image1)#将灰度图保存到指定文件夹print(image1)

3.4创建黑白图像与随机像素值:np.zero((高,宽,通道),dtype=np.uint8)

import cv2 as cvimport numpy as np#创建全0数组,表示全黑图片black = np.zeros(((360,480,3)),dtype=np.uint8)cv.imshow(\'black\',black)#创建全1数组,表示全白图片white = np.full((360,480,3),255,dtype=np.uint8)cv.imshow(\'white\',white)#创建全随机数组,表示随机图片 np.random.randint(low,high,shape,dtype)random = np.random.randint(0,255,(360,480,3),dtype=np.uint8)#左闭右开,high取不到cv.imshow(\'random\',random)#索引修改像素值,表示白色图像white[:,:,:] =255white[:,:]=255white[:] = 255cv.imshow(\'white3\',white)cv.imshow(\'white2\',white)cv.imshow(\'white0\',white)cv.imshow(\'white1\',white)

3.5图片的切片与裁剪 

————首先,我们需要利用画图工具来定位我们需要的像素点,找到图像的对称坐标,最后利用切片的方法来实现图片的裁剪;最后的结果是我们将我们需要的图片眼睛与鼻子裁剪了出来,原图与裁剪的比较

import cv2 as cvimport numpy as nppig = cv.imread(\"../images/pig.png\")#裁剪图像559 185 620 273#切片 arr[h1:h2,w1:w2] h2=h1+h w2=w1+wnose = pig[288:438, 400:561]#裁剪鼻子,288-438行400-561列cv.imshow(\"pig1\", nose)eye = pig[160:289,353:645]#裁剪眼睛,160-289行353-645列cv.imshow(\"pig2\", eye)#读取视频capture = cv.VideoCapture(\"../images/videocap.mp4\")cv.waitKey(0)cv.destroyAllWindows()

 3.6 调整图像的大小cv.resize(图像,尺寸),将图片调整成我们想要的大小

import cv2 as cvimport numpy as np# 读取图片img = cv.imread(\"../images/pig.png\")print(img.shape)#调整图片大小cv.resize(img, (width, height))pig2= cv.resize(img, (300, 300))cv.imshow(\"pig2\", pig2)print(pig2.shape)cv.imshow(\"pig1\", img)cv.waitKey(0)cv.destroyAllWindows()

3.7 图形的绘制,包括直线,矩形,圆形,文字(cv.line/circle/rectangle/putText)

import cv2 as cvimport numpy as npcat = cv.imread(\"../images/1.jpg\")#绘制直线cv.line(cat, (50,40),(80,40),(0,0,255),2)cv.imshow(\"cat\", cat)#绘制矩形 cv2.retangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]])cv.rectangle(cat, (78,106),(237,306),(0,255,0),-1)#填充-1cv.imshow(\"cat1\", cat)#绘制圆形#cv.LINE_AA 反走样技术,抗锯齿,平滑,默认LINE_8cv.circle(cat, (446,335), 100, (255,0,0), 5, cv.LINE_AA)#cv.imshow(\"cat2\", cat)#绘制文字cv.putText(cat, \"I am cat!\", (359,43), cv.FONT_HERSHEY_COMPLEX, 1, (0,0,255), 2, cv.LINE_AA)cv.imshow(\"cat3\", cat)cv.waitKey(0)cv.destroyAllWindows()

4、读取视频cv.VideoCapture(路径),利用死循环来实现视频按帧数播放;

import cv2 as cvimport numpy as np#创建一个视频对象#cap = cv.VideoCapture(\"../images/videocap.mp4\")#循环读取每一帧视频cap = cv.VideoCapture(0)#0表示使用电脑自带摄像头while True: #调用read方法读取视频帧 ret,frame = cap.read() #判断是否读取成功 if ret: cv.imshow(\'video\',frame) else: print(\"视频读取完毕\") break if cv.waitKey(40)&0xff==ord(\'q\'): print(\"视频中断\") breakcv.destroyAllWindows()cap.release()

总结:主要介绍一下opencv的基础操作,为后续图像更深层次的学习做准备。opencv是很常见的图像处理软件库,大多都是基于此操作。因此多多巩固学习也是很有必要的。