实验二、OpenCV 基础

一、实验简介

本实验为 OpenCV 的基础操作,包含 OpenCV 入门、 OpenCV 几何变换、 OpenCV 图片处理和绘制文字线段、图像美化等内容,为后续基于 OpenCV 的视频处理奠定基础。

二、实验目的

通过本实验掌握基于 OpenCV 的如下内容:

  1. 基础操作:基于 OpenCV 图片读取与展示、图片写入、像素操作等;
  2. 几何变换:图片缩放、图片剪切、透视变换等;
  3. 图片处理和绘制文字线段:图像二值化、矩形圆形绘制、文字图片绘制;
  4. 图像美化:彩色图片直方图、高斯均值滤波等。

三、实验步骤

1. 图像二值化

实验步骤

利用 OpenCV 提供的函数cv2.imread读入图片,利用cv2.cvtColor函数将图片转换成灰度图像,多次处理数据与阈值,将其绘制在同一张图片上,使用plt.show函数并显示在 upyter 上。

实验代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

img = cv2.imread('01.jpg',1)
GrayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret,thresh1=cv2.threshold(GrayImage,10,255,cv2.THRESH_BINARY)
ret,thresh2=cv2.threshold(GrayImage,10,255,cv2.THRESH_BINARY_INV)
ret,thresh3=cv2.threshold(GrayImage,10,255,cv2.THRESH_TRUNC)
ret,thresh4=cv2.threshold(GrayImage,10,255,cv2.THRESH_TOZERO)
ret,thresh5=cv2.threshold(GrayImage,10,255,cv2.THRESH_TOZERO_INV)
titles = ['Gray Image','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV']
images = [GrayImage, thresh1, thresh2, thresh3, thresh4, thresh5]
for i in range(6):
plt.subplot(2,3,i+1),plt.imshow(images[i],'gray')
plt.title(titles[i])
plt.xticks([]),plt.yticks([])
plt.show()

2. 矩阵圆形绘制

实验步骤

设定一个储存图片规格的参数,利用np.zeros函数创建一个储存图片的对象,使用 OpenCV 的绘图函数,经多次叠加形成最终的图案。

实验代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

newImageInfo = (600,600,3)
dst = np.zeros(newImageInfo,np.uint8)

cv2.circle(dst,(300,300),(300),(255,0,0),5)
points = np.array([[300,0], [50,450], [550,450]], np.int32)
cv2.polylines(dst,[points],True,(0,0,255),5)
cv2.ellipse(dst, (300,330), (160,110), 0, 0, 360, (0,255,255), 3)
cv2.ellipse(dst, (300,350), (160,110), 0, 0, -180, (0,255,255), 3)
cv2.circle(dst,(300,350),(90),(255,255,255),-1)

dst = cv2.cvtColor(dst, cv2.COLOR_BGR2RGB)

plt.imshow(dst)
plt.show()

3. 文字图片绘制

实验步骤

使用cv2.imread读入背景图片,使用 OpenCV 的绘图和文字注释函数,在背景图片上叠加上预期图形及文字。

实验代码

1
2
3
4
5
6
7
8
9
10
11
12
13
import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

img = cv2.imread('02.png',1)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.rectangle(img,(800,300),(1500,1000),(255,153,255),6)
cv2.putText(img,'Angle',(900,250),font,6,(255,255,255),10,cv2.LINE_AA)

dst = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(dst)
plt.show()

四. 彩色图片直方图

实验步骤

使用cv2.imread读入背景图片,分别利用cv2.cvtcolor函数和cv2.calcHist函数转换为彩色直方图。

实验代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import cv2
import numpy as np
import matplotlib.pyplot as
%matplotlib inline

img = cv2.imread('01.png', 1)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
histb = cv2.calcHist([img], [0], None, [256], [0, 255])

plt.imshow(img)
plt.show()
plt.hist(img.ravel(), 256)
plt.show()
plt.plot(histb, color='b')
plt.show()

五. 高斯均值滤波

实验步骤

使用cv2.imread函数读入待处理图片,利用cv2.GaussianBlur函数对整张图片进行加权平均,最后输出原图和处理后图片进行对比。

实验代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

img = cv2.imread('logo.jpg',1)
dst = cv2.GaussianBlur(img,(5,5),1.5)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
dst = cv2.cvtColor(dst, cv2.COLOR_BGR2RGB)

plt.figure(figsize=(14, 6), dpi=100)
plt.subplot(121)
plt.imshow(img)
plt.subplot(122)
plt.imshow(dst)
plt.show()

四、思考分析

  1. 实验总结和收获
    初步学会了OpenCV的基础操作,可以使用OpenCV对图片进行几何变换、绘制文字线段、图像美化等操作,加深了对于OpenCV内各函数的理解。

  2. 实验失败/待改进
    对于OpenCV的进阶用法还无法熟练运用。


实验二、OpenCV 基础
https://flowerdown.org/posts/20221013-141348.html
作者
Unrealfeather
发布于
2022年10月13日
许可协议