opencv期末练习题(1)附带解析

复制代码
尝试对car.jpg中的车辆用蓝色框进行选中,并在左下角显示车牌.
python 复制代码
%matplotlib inline
import cv2
import matplotlib.pyplot as plt
def imshow(img,gray=False,bgr_mode=False):
    if gray:
        img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
        plt.imshow(img,cmap="gray")
    else:
        if not bgr_mode:
            img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
        plt.imshow(img)
    plt.show()

这段代码主要是一个用于在Jupyter Notebook中显示图像的辅助函数。让我们逐行解读:

  1. %matplotlib inline: 这是一个Jupyter Notebook的魔法命令,它告诉Jupyter在Notebook中内联显示matplotlib的图表,而不是弹出新的窗口。

  2. import cv2: 导入OpenCV库,用于图像处理。

  3. import matplotlib.pyplot as plt: 导入matplotlib.pyplot库,用于绘图和图像显示。

  4. def imshow(img, gray=False, bgr_mode=False)::定义了一个名为imshow的函数,该函数用于显示图像。它接受三个参数:

    • img: 要显示的图像。
    • gray: 一个布尔值,指示是否将图像转换为灰度(默认为False)。
    • bgr_mode: 一个布尔值,指示是否将图像从BGR模式转换为RGB模式(默认为False)。
  5. if gray:: 如果 gray 参数为 True,则执行以下语句块:

    • img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY): 使用OpenCV将图像转换为灰度。

    • plt.imshow(img, cmap="gray"): 使用matplotlib.pyplot的imshow函数显示灰度图像。

  6. else:: 如果 gray 参数为 False,则执行以下语句块:

    • if not bgr_mode:: 如果 bgr_mode 参数为 False,则执行以下语句块:

      • img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB): 使用OpenCV将图像从BGR模式转换为RGB模式。
    • plt.imshow(img): 使用matplotlib.pyplot的imshow函数显示图像。

  7. plt.show(): 显示图像。这一行代码会在Notebook中直接显示图像。

这个函数的作用是根据输入的参数显示彩色或灰度图像,确保在Jupyter Notebook中正确显示图像。

python 复制代码
import cv2
car = cv2.imread("car.jpg")
imshow(car)

上面这两行代码是读取本地car.jpg图片并用上面定义的imshow进行展示

python 复制代码
rect_car = cv2.rectangle(img=car,pt1=(460,0),pt2=(1000,350),color=(0,0,255),thickness=3)
imshow(rect_car)

这段代码利用 OpenCV 绘制了一个红色边框的矩形框,然后使用之前定义的 imshow 函数在 Jupyter Notebook 中显示结果。

让我们逐行解读:

  1. rect_car = cv2.rectangle(img=car, pt1=(460,0), pt2=(1000,350), color=(0,0,255), thickness=3): 这一行代码使用 cv2.rectangle 函数在图像 car 上绘制一个矩形框。具体参数解释如下:

    • img=car: 操作的图像,这里是 car
    • pt1=(460,0): 矩形框的一个顶点坐标。
    • pt2=(1000,350): 矩形框对角线上的另一个顶点坐标。
    • color=(0,0,255): 绘制矩形的颜色,这里是红色 (BGR 格式,所以 (0, 0, 255) 表示红色)。
    • thickness=3: 矩形框的边框宽度,这里是3像素。
  2. imshow(rect_car): 利用之前定义的 imshow 函数显示带有绘制矩形框的图像。因为 imshow 函数中有默认参数 bgr_mode=False,所以在显示之前将 BGR 格式转换为 RGB 格式。

这段代码的效果是在 car 图像上绘制了一个红色边框的矩形框,并在 Jupyter Notebook 中显示带有矩形框的图像。

python 复制代码
text_car = cv2.putText(img=rect_car,text="SU EUK722",color=(255,255,255),thickness=2,
            org=(0,500),fontFace=1,fontScale=5)
imshow(text_car)

这段代码使用 OpenCV 的 cv2.putText 函数在之前绘制矩形框的图像上添加了文本,然后通过之前定义的 imshow 函数在 Jupyter Notebook 中显示结果。

让我们逐行解读:

  1. text_car = cv2.putText(img=rect_car, text="SU EUK722", color=(255,255,255), thickness=2, org=(0,500), fontFace=1, fontScale=5): 这一行代码使用 cv2.putText 函数在图像 rect_car 上添加文本。具体参数解释如下:

    • img=rect_car: 操作的图像,这里是之前绘制了矩形框的图像 rect_car
    • text="SU EUK722": 要添加的文本内容。
    • color=(255,255,255): 文本的颜色,这里是白色 (BGR 格式,所以 (255, 255, 255) 表示白色)。
    • thickness=2: 文本的字体粗细。
    • org=(0,500): 文本的起始坐标,即左下角的位置。
    • fontFace=1: 字体的类型,这里是正常字体。
    • fontScale=5: 文本的缩放比例。
  2. imshow(text_car): 利用之前定义的 imshow 函数显示带有添加文本的图像。

这段代码的效果是在之前绘制了红色边框的图像上添加了白色文本 "SU EUK722",并在 Jupyter Notebook 中显示带有文本的图像。

python 复制代码
circle_car = cv2.circle(img=text_car,center=(730,230),radius=20,color=(255,0,0),thickness=3)
imshow(circle_car)

这段代码使用 OpenCV 的 cv2.circle 函数在之前添加了文本的图像上绘制了一个蓝色边框的圆形,然后通过之前定义的 imshow 函数在 Jupyter Notebook 中显示结果。

让我们逐行解读:

  1. circle_car = cv2.circle(img=text_car, center=(730,230), radius=20, color=(255,0,0), thickness=3): 这一行代码使用 cv2.circle 函数在图像 text_car 上绘制一个圆形。具体参数解释如下:

    • img=text_car: 操作的图像,这里是之前添加了文本的图像 text_car
    • center=(730,230): 圆心的坐标。
    • radius=20: 圆的半径。
    • color=(255,0,0): 绘制圆的颜色,这里是蓝色 (BGR 格式,所以 (255, 0, 0) 表示蓝色)。
    • thickness=3: 圆的边框宽度。
  2. imshow(circle_car): 利用之前定义的 imshow 函数显示带有绘制圆形的图像。

这段代码的效果是在之前添加了文本的图像上绘制了一个蓝色边框的圆形,并在 Jupyter Notebook 中显示带有圆形的图像。

python 复制代码
license_car = cv2.rectangle(img=circle_car,pt1=(650,260),pt2=(800,300),color=(0,255,0),thickness=3)
imshow(license_car)

这段代码使用 OpenCV 的 cv2.rectangle 函数在之前绘制了蓝色圆形的图像上添加了一个绿色边框的矩形,然后通过之前定义的 imshow 函数在 Jupyter Notebook 中显示结果。

让我们逐行解读:

  1. license_car = cv2.rectangle(img=circle_car, pt1=(650,260), pt2=(800,300), color=(0,255,0), thickness=3): 这一行代码使用 cv2.rectangle 函数在图像 circle_car 上绘制一个矩形框。具体参数解释如下:

    • img=circle_car: 操作的图像,这里是之前添加了圆形的图像 circle_car
    • pt1=(650,260): 矩形框的一个顶点坐标。
    • pt2=(800,300): 矩形框对角线上的另一个顶点坐标。
    • color=(0,255,0): 绘制矩形框的颜色,这里是绿色 (BGR 格式,所以 (0, 255, 0) 表示绿色)。
    • thickness=3: 矩形框的边框宽度。
  2. imshow(license_car): 利用之前定义的 imshow 函数显示带有添加矩形框的图像。

这段代码的效果是在之前绘制了蓝色圆形的图像上添加了一个绿色边框的矩形框,并在 Jupyter Notebook 中显示带有矩形框的图像。

python 复制代码
cv2.imwrite("text_car.jpg",text_car)

最后将图片保存到本地。

相关推荐
FuLLovers16 分钟前
2024-09-13 冯诺依曼体系结构 OS管理 进程
linux·开发语言
IT毕设梦工厂1 小时前
计算机毕业设计选题推荐-在线拍卖系统-Java/Python项目实战
java·spring boot·python·django·毕业设计·源码·课程设计
everyStudy1 小时前
JS中判断字符串中是否包含指定字符
开发语言·前端·javascript
luthane1 小时前
python 实现average mean平均数算法
开发语言·python·算法
xuanyu221 小时前
Linux常用指令
linux·运维·人工智能
码农研究僧1 小时前
Flask 实现用户登录功能的完整示例:前端与后端整合(附Demo)
python·flask·用户登录
Ylucius1 小时前
动态语言? 静态语言? ------区别何在?java,js,c,c++,python分给是静态or动态语言?
java·c语言·javascript·c++·python·学习
凡人的AI工具箱2 小时前
AI教你学Python 第11天 : 局部变量与全局变量
开发语言·人工智能·后端·python
sleP4o2 小时前
Python操作MySQL
开发语言·python·mysql
是店小二呀2 小时前
【C++】C++ STL探索:Priority Queue与仿函数的深入解析
开发语言·c++·后端