第四节 注释图片

本文章对应OpenCV免费公开课第四节 Image Annotation。课程链节OpenCV官网 配合官网视频教程效果更好。
记得关注专栏啊!最近跟新会很频繁的!

在本节课中我们将讲述如何使用OpenCV给图片添加注释。我们将学习如何添加以下的注释:

  • 划线
  • 画圆圈
  • 画正方形
  • 添加文字
    这些操作将在你想要注释你程序的结果时变得有用。注释在调试的时候也会很有用。

准备

下载素材

通过一下命令 理论上可以下载到所需的所有素材。

def download_and_unzip(url, save_path):  
    print(f"Downloading and extracting assests....", end="")  
  
    # Downloading zip file using urllib package.  
    urlretrieve(url, save_path)  
  
    try:  
        # Extracting zip file using the zipfile package.  
        with ZipFile(save_path) as z:  
            # Extract ZIP file contents in the same directory.  
            z.extractall(os.path.split(save_path)[0])  
  
        print("Done")  
  
    except Exception as e:  
        print("\nInvalid file.", e)

URL = r"https://www.dropbox.com/s/rys6f1vprily2bg/opencv_bootcamp_assets_NB3.zip?dl=1"  
  
asset_zip_path = os.path.join(os.getcwd(), "opencv_bootcamp_assets_NB3.zip")  
  
# Download if assest ZIP does not exists.  
if not os.path.exists(asset_zip_path):  
    download_and_unzip(URL, asset_zip_path)

下载不了的这里有百度网盘链接:
https://pan.baidu.com/s/1s3yGt01bBz-EFOL0bH7UNA?pwd=feyq 提取码: feyq

导入库

import os  
import cv2  
import numpy as np  
import matplotlib.pyplot as plt  
  
from zipfile import ZipFile  
from urllib.request import urlretrieve  
  
from IPython.display import Image  //让图像可以直接在jupyter中显示
  
%matplotlib inline //让图像可以直接在jupyter中显示

在以下的课程中我们将使用一下图片作为样例。

# 读取图片
image = cv2.imread("Apollo_11_Launch.jpg", cv2.IMREAD_COLOR)  
  
# 展示原始图像 
plt.imshow(image[:, :, ::-1])

在这里插入图片描述
注意此处图片看似黑白 实际上为彩色图片

画一条线

让我们从在图片中华一条线开始,我们将使用 cv2.line 函数来绘制。

函数参数

img = cv2.line(img, pt1, pt2, color[, thickness[, lineType[, shift]]])  

img: 已经被注释过的图片

这个函数有 四个必选参数

  1. img: 将要画线的图片
  2. pt1:线的第一个点(x,y坐标)
  3. pt2:线的第二个点
  4. color:将要画的先的颜色
    其他重要的可选参数包括:
  5. thickness:线的粗细 整数 默认为1;
  6. lineType:线的类型。默认值为8 表示使用8联通方式绘制。通常, cv2.LIME_AA (平滑线条) 一般被用来绘制线条。

OpenCV Documentation

line: Documentation link

让我们看一个例子

imageLine = image.copy()  
  
# 线从 (200,100) 到 (400,100)  
# 线的颜色是黄色( YELLOW ) (回忆 cv使用BGR颜色格式)  
# 线的粗细为 5px  
# 线的类型为 cv2.LINE_AA  
  
cv2.line(imageLine, (200, 100), (400, 100), (0, 255, 255), thickness=5, lineType=cv2.LINE_AA);  
  
# 展示图片
plt.imshow(imageLine[:,:,::-1])

绘制原型

让我们喀什学习如何在图片上画一个圆形。我们将使用到cv2.circle函数来实现。

函数参数

img = cv2.circle(img, center, radius, color[, thickness[, lineType[, shift]]])  

img: 被注释过的输出图像

这个函数有4个必选参数:

  1. img: 将要被画线的图
  2. center: 圆圈的中心
  3. radius: 圆的半径
  4. color: 圆的颜色

接下来让我们看看其他我们将经常用到的参数。

  1. thickness: 圆的外边框大小(如果为正数). 如果这个变量为负数,圆将被填满.
  2. lineType: 边界的类型. 这个和cv2.line中的lineType参数相同

OpenCV Documentation

circle: Documentation link

让我们看一个例子。

# 画一个圆形 
imageCircle = image.copy()  
  
cv2.circle(imageCircle, (900,500), 100, (0, 0, 255), thickness=2, lineType=cv2.LINE_AA);  
  
# 展示图片  
plt.imshow(imageCircle[:,:,::-1])

绘制一个正方形

我们将使用cv2.rectangle函数来在图片上绘制正方形。这个函数有以下参数。

函数参数

img = cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]])

img: 被注释的输出图片

这个函数有 4个必选参数:

  1. img:将要被画线的图
  2. pt1:矩形的顶点. 在此通常使用 左上顶点.
  3. pt2: 矩形的顶点. 在此通常使用 右下顶点.
  4. color: 矩形颜色

接下来让我们看看其他我们将经常用到的参数。

  1. thickness: 矩形的外边框大小(如果为正数). 如果这个变量为负数,矩形将被填满.
  2. lineType: 边界的类型. 这个和cv2.line中的lineType参数相同

OpenCV Documentation Links

rectangle: Documentation link

# 画一个矩形 (线宽是个正整数)  
imageRectangle = image.copy()  
  
cv2.rectangle(imageRectangle, (500, 100), (700, 600), (255, 0, 255), thickness=5, lineType=cv2.LINE_8)  
  
# 显示图像
plt.imshow(imageRectangle[:, :, ::-1])

添加文字

最后让我们看看如何使用cv2.putText在图片上添加文字。

函数参数

img = cv2.putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]])

img: 被注释的输出图片

这个函数有6个必选参数:
这个函数有 4个必选参数:

  1. img:将要被写上文字的图

  2. text: 要写的字符串

  3. org: 在图片中文字左下角的位置

  4. fontFace: 字体种类

  5. fontScale: 字体比例因子,乘以字体基本大小为显示大小。

  6. color: 文字颜色
    接下来让我们看看其他我们将经常用到的参数。

  7. thickness:字体粗细. 默认为1. 不可为负数。

  8. lineType: 线的种类。默认为8联通。通常使用,cv2.LINE_AA。

OpenCV Documentation

putText: Documentation link

让我们看一个例子。

imageText = image.copy()  
text = "Apollo 11 Saturn V Launch, July 16, 1969"  
fontScale = 2.3  
fontFace = cv2.FONT_HERSHEY_PLAIN  
fontColor = (0, 255, 0)  
fontThickness = 2  
  
cv2.putText(imageText, text, (200, 700), fontFace, fontScale, fontColor, fontThickness, cv2.LINE_AA);  
  
# Display the image  
plt.imshow(imageText[:, :, ::-1])

课后练习

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

原文为OpenCV免费公开课Free OpenCV Course - Official Certification by OpenCV
翻译 TallentJoe
未经允许,禁止转载


答案:DADDA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值