OpenCV实战教程 第一部门:根本入门

[复制链接]
发表于 2025-9-19 03:14:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
第一部门:根本入门

1. OpenCV简介

什么是OpenCV及其应用范畴

OpenCV(Open Source Computer Vision Library)是一个开源的盘算机视觉和呆板学习软件库,于1999年由Intel公司发起,如今由非营利构造OpenCV.org维护。OpenCV旨在提供一个共同的根本办法,加速盘算机视觉在贸易产物中的应用,并推动盘算机视觉研究的发展。
OpenCV的紧张特点:


  • 完全开源和跨平台
  • 支持C++、Python、Java等多种编程语言
  • 包含高出2500个优化算法
  • 环球拥有高出1800万下载量
紧张应用范畴:

  • 工业主动化:缺陷检测、零件辨认、尺寸丈量
  • 医疗影像:病变检测、医学图像分析
  • 安防监控监控:人脸辨认、行为分析、车牌辨认
  • 加强现实(AR):实时图像处置处罚、特征追踪
  • 主动驾驶:蹊径标记辨认、停滞物检测
  • 呆板人导航:情况感知、路径规划
  • 文档分析:OCR(光学字符辨认)、文本检测
  • 人机交互:手势辨认、姿态检测
  • 移动应用:照片处置处罚、实时滤镜
开辟情况搭建

Windows体系

安装Python和pip(如果尚未安装)

  • 访问 Python官网,下载并安装最新版Python(保举Python 3.7以上版本)
  • 安装时勾选"Add Python to PATH"选项
  • 打开下令提示符,输入以下下令确认安装乐成:
  1. [/code]
  2. bash
  3. [code]python --version
  4. pip --version
复制代码
安装OpenCV

  • 在下令提示符中运行以下下令:
  1. [/code]
  2. bash
  3. [code]pip install opencv-python
  4. pip install opencv-contrib-python  # 包含扩展模块
复制代码
安装IDE(保举)


  • 下载并安装Visual Studio Code: Visual Studio Code - Code Editing. Redefined
  • 安装Python扩展
MacOS体系

利用Homebrew安装Python(如果尚未安装)

  • 安装Homebrew(如果尚未安装):
  1. [/code]
  2. bash
  3. [code]/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
复制代码

  • 安装Python:
  1. [/code]
  2. bash
  3. [code]brew install python
复制代码
安装OpenCV
  1. [/code]
  2. bash
  3. [code]pip3 install opencv-python
  4. pip3 install opencv-contrib-python  # 包含扩展模块
复制代码
安装IDE(保举)


  • 下载并安装Visual Studio Code: Visual Studio Code - Code Editing. Redefined
  • 安装Python扩展
Linux体系(Ubuntu示例)

安装Python和pip(如果尚未安装)
  1. [/code]
  2. bash
  3. [code]sudo apt update
  4. sudo apt install python3 python3-pip
复制代码
安装OpenCV依赖项
  1. [/code]
  2. bash
  3. [code]sudo apt install libgl1-mesa-glx
复制代码
安装OpenCV
  1. [/code]
  2. bash
  3. [code]pip3 install opencv-python
  4. pip3 install opencv-contrib-python  # 包含扩展模块
复制代码
安装IDE(保举)
  1. [/code]
  2. bash
  3. [code]sudo snap install code --classic  # 安装Visual Studio Code
复制代码
安装设置和第一个步伐"Hello OpenCV"

验证安装

创建一个Python文件,比方verify_opencv.py,输入以下代码:
  1. [/code]
  2. python
  3. [code]import cv2
  4. # 打印OpenCV版本
  5. print(f"OpenCV 版本: {cv2.__version__}")
  6. # 检查是否可以创建窗口
  7. try:
  8.     cv2.namedWindow("Test", cv2.WINDOW_NORMAL)
  9.     cv2.destroyAllWindows()
  10.     print("OpenCV GUI功能正常!")
  11. except Exception as e:
  12.     print(f"OpenCV GUI功能异常: {e}")
复制代码
运行此脚本验证OpenCV安装是否乐成。
第一个步伐:"Hello OpenCV"

我们将创建一个简朴的步伐,实现以下功能:

  • 读取一张图片
  • 在图片上体现"Hello OpenCV"笔墨
  • 体现图片
  • 生存效果
创建一个Python文件,比方hello_opencv.py:
  1. [/code]
  2. python
  3. [code]import cv2
  4. import numpy as np
  5. # 创建一个纯色背景图像(500x300的蓝色背景)
  6. # OpenCV中颜色顺序是BGR(蓝、绿、红)而不是RGB
  7. image = np.zeros((300, 500, 3), dtype=np.uint8)
  8. image[:] = (255, 127, 0)  # 橙色背景
  9. # 添加文字
  10. text = "Hello OpenCV!"
  11. font = cv2.FONT_HERSHEY_SIMPLEX
  12. font_scale = 1.5
  13. font_thickness = 3
  14. text_color = (255, 255, 255)  # 白色文字
  15. # 获取文本大小,以便居中
  16. (text_width, text_height), baseline = cv2.getTextSize(text, font, font_scale, font_thickness)
  17. x = (image.shape[1] - text_width) // 2  # 计算文本起始x坐标(居中)
  18. y = (image.shape[0] + text_height) // 2  # 计算文本起始y坐标(居中)
  19. # 在图像上绘制文本
  20. cv2.putText(image, text, (x, y), font, font_scale, text_color, font_thickness)
  21. # 在窗口中显示图像
  22. window_name = "First OpenCV Program"
  23. cv2.namedWindow(window_name)
  24. cv2.imshow(window_name, image)
  25. # 保存图像
  26. cv2.imwrite("hello_opencv.jpg", image)
  27. print("图像已保存为 'hello_opencv.jpg'")
  28. # 等待直到按下任意键
  29. print("按任意键关闭窗口...")
  30. cv2.waitKey(0)
  31. cv2.destroyAllWindows()
复制代码
代码讲解:

  • import cv2:导入OpenCV库。
  • import numpy as np:导入NumPy库,用于图像矩阵利用。
  • image = np.zeros((300, 500, 3), dtype=np.uint8):创建一个黑色图像,巨细为300x500像素,3个颜色通道。
  • image[:] = (255, 127, 0):将图像背景设为橙色。留意OpenCV中颜色序次是BGR(蓝、绿、红)。
  • cv2.putText():在图像上绘制笔墨。
  • cv2.namedWindow():创建一个定名窗口。
  • cv2.imshow():在窗口中体现图像。
  • cv2.imwrite():生存图像到文件。
  • cv2.waitKey(0):等候按键输入,参数0体现无穷等候。
  • cv2.destroyAllWindows():关闭全部窗口。
运行效果:


  • 一个带有"Hello OpenCV!"笔墨的橙色窗口
  • 天生的图像将生存为hello_opencv.jpg
这是你的第一个OpenCV步伐!恭喜!如今我们已经完成了OpenCV的安装和根本设置,接下来将深入学习图像根本知识。
2. 图像根本

图像的数字体现方式

在盘算机中,图像以二维或三维矩阵(数组)的情势存储:
灰度图像:


  • 二维矩阵,每个元素代表一个像素
  • 像素值范围通常为0-255(8位),0体现黑色,255体现白色
  • 比方:100×100的灰度图像是一个100×100的二维矩阵
彩色图像:


  • 三维矩阵,其中第三个维度体现颜色通道
  • 常见的RGB图像有3个通道:红、绿、蓝
  • 在OpenCV中,颜色通道序次为BGR(蓝、绿、红)
  • 像素值范围通常为每通道0-255(8位)
  • 比方:100×100的彩色RGB图像是一个100×100×3的三维矩阵
图像数据范例: 在OpenCV中,图像通常利用NumPy数组体现,常见的数据范例有:


  • uint8:无符号8位整数(0-255),最常用
  • float32:32位浮点数,用于高精度盘算
  • float64:64位浮点数
让我们创建一个步伐来明确图像的数字体现:
  1. [/code]
  2. python
  3. [code]import cv2
  4. import numpy as np
  5. import matplotlib.pyplot as plt
  6. # 创建一个简单的灰度渐变图像
  7. gradient = np.linspace(0, 255, 256, dtype=np.uint8)
  8. gradient = np.tile(gradient, (100, 1))
  9. # 创建一个简单的彩色图像
  10. color_channels = np.zeros((100, 256, 3), dtype=np.uint8)
  11. color_channels[:, :, 0] = np.linspace(0, 255, 256, dtype=np.uint8)  # 蓝色通道
  12. color_channels[:, :, 1] = np.linspace(0, 255, 256, dtype=np.uint8)  # 绿色通道
  13. color_channels[:, :, 2] = np.linspace(0, 255, 256, dtype=np.uint8)  # 红色通道
  14. # 显示图像
  15. plt.figure(figsize=(10, 6))
  16. plt.subplot(2, 1, 1)
  17. plt.title('灰度渐变图像')
  18. plt.imshow(gradient, cmap='gray')
  19. plt.axis('off')
  20. plt.subplot(2, 1, 2)
  21. plt.title('RGB渐变图像')
  22. plt.imshow(cv2.cvtColor(color_channels, cv2.COLOR_BGR2RGB))  # 转换BGR为RGB用于正确显示
  23. plt.axis('off')
  24. plt.tight_layout()
  25. plt.savefig('gradients.png')
  26. plt.show()
  27. # 打印图像形状和数据类型
  28. print(f"灰度图像形状: {gradient.shape}, 数据类型: {gradient.dtype}")
  29. print(f"彩色图像形状: {color_channels.shape}, 数据类型: {color_channels.dtype}")
  30. # 查看特定位置的像素值
  31. position = (50, 150)  # 第50行,第150列
  32. print(f"灰度图像在位置{position}的像素值: {gradient[position]}")
  33. print(f"彩色图像在位置{position}的像素值: {color_channels[position]}")
复制代码
代码讲解:

  • 创建了一个灰度渐变图像(从黑到白)
  • 创建了一个RGB渐变图像(从黑到白)
  • 利用matplotlib体现这些图像
  • 打印图像的外形和数据范例
  • 检察特定位置的像素值
   留意:我们利用cv2.cvtColor()函数将BGR转换为RGB,由于OpenCV利用BGR序次,而matplotlib利用RGB序次。
  色彩空间(RGB、HSV、灰度图)

颜色空间是体现颜色的不同方法。最常见的色彩空间包括:
RGB(红-绿-蓝):


  • 最常见的色彩空间,利用红、绿、蓝三个通道的组合体现颜色
  • 每个通道值范围为0-255(8位)
  • 在OpenCV中,默认颜色序次是BGR而不是RGB
HSV(色调-饱和度-明度):


  • 色调(H):颜色种类,范围0-179(在OpenCV中,对应0-360度)
  • 饱和度(S):颜色的纯度/鲜艳水平,范围0-255
  • 明度(V):颜色的亮度,范围0-255
  • 比RGB更靠近人类感知颜色的方式
  • 常用于颜色追踪和分割
灰度(Grayscale):


  • 单通道,只有亮度信息,没有颜色信息
  • 值范围通常为0-255,0体现黑色,255体现白色
  • 盘算量小,常用于不必要颜色信息的任务
让我们编写一个步伐来实现不同色彩空间的转换和比力:
  1. [/code]
  2. python
  3. [code]import cv2
  4. import numpy as np
  5. import matplotlib.pyplot as plt
  6. # 创建一个彩色测试图像(彩虹渐变)
  7. def create_rainbow():
  8.     # 创建一个大小为200x300的彩虹图像
  9.     rainbow = np.zeros((200, 300, 3), dtype=np.uint8)
  10.    
  11.     # 为了简化,我们创建一个水平的彩虹渐变
  12.     for i in range(300):
  13.         # 将位置映射到0-360的色调值(对应OpenCV中的0-179)
  14.         hue = int(i / 300 * 180)
  15.         # 创建一个满饱和度、满亮度的HSV颜色
  16.         rainbow_hsv = np.ones((200, 1, 3), dtype=np.uint8) * np.array([hue, 255, 255], dtype=np.uint8)
  17.         # 转换为BGR
  18.         rainbow[:, i:i+1] = cv2.cvtColor(rainbow_hsv, cv2.COLOR_HSV2BGR)
  19.    
  20.     return rainbow
  21. # 创建彩虹图像
  22. rainbow = create_rainbow()
  23. # 转换为不同的色彩空间
  24. rainbow_rgb = cv2.cvtColor(rainbow, cv2.COLOR_BGR2RGB)  # BGR到RGB
  25. rainbow_hsv = cv2.cvtColor(rainbow, cv2.COLOR_BGR2HSV)  # BGR到HSV
  26. rainbow_gray = cv2.cvtColor(rainbow, cv2.COLOR_BGR2GRAY)  # BGR到灰度
  27. # 显示不同色彩空间的图像
  28. plt.figure(figsize=(12, 10))
  29. plt.subplot(4, 1, 1)
  30. plt.title('原始图像 (BGR转RGB显示)')
  31. plt.imshow(rainbow_rgb)
  32. plt.axis('off')
  33. plt.subplot(4, 1, 2)
  34. plt.title('HSV色彩空间 - 色调(H)通道')
  35. plt.imshow(rainbow_hsv[:, :, 0], cmap='hsv')
  36. plt.axis('off')
  37. plt.subplot(4, 1, 3)
  38. plt.title('HSV色彩空间 - 饱和度(S)和亮度(V)通道')
  39. plt.imshow(np.dstack([np.zeros_like(rainbow_hsv[:, :, 1]),
  40.                       rainbow_hsv[:, :, 1],
  41.                       rainbow_hsv[:, :, 2]]),
  42.            cmap='gray')
  43. plt.axis('off')
  44. plt.subplot(4, 1, 4)
  45. plt.title('灰度图像')
  46. plt.imshow(rainbow_gray, cmap='gray')
  47. plt.axis('off')
  48. plt.tight_layout()
  49. plt.savefig('color_spaces.png')
  50. plt.show()
  51. # 展示H、S、V三个独立通道
  52. plt.figure(figsize=(12, 8))
  53. plt.subplot(3, 1, 1)
  54. plt.title('HSV - 色调(H)通道')
  55. plt.imshow(rainbow_hsv[:, :, 0], cmap='hsv')
  56. plt.axis('off')
  57. plt.subplot(3, 1, 2)
  58. plt.title('HSV - 饱和度(S)通道')
  59. plt.imshow(rainbow_hsv[:, :, 1], cmap='gray')
  60. plt.axis('off')
  61. plt.subplot(3, 1, 3)
  62. plt.title('HSV - 亮度(V)通道')
  63. plt.imshow(rainbow_hsv[:, :, 2], cmap='gray')
  64. plt.axis('off')
  65. plt.tight_layout()
  66. plt.savefig('hsv_channels.png')
  67. plt.show()
复制代码
代码讲解:

  • create_rainbow()函数创建了一个彩虹渐变图像,展示从红到紫的完备色彩范围
  • 利用cv2.cvtColor()函数将图像从BGR转换到其他色彩空间
  • 利用matplotlib体现不同色彩空间的图像和HSV的各个通道
  • cv2.COLOR_BGR2RGB、cv2.COLOR_BGR2HSV、cv2.COLOR_BGR2GRAY是OpenCV中的色彩空间转换常量
OpenCV中常用的色彩空间转换常量:


  • cv2.COLOR_BGR2RGB:BGR→RGB
  • cv2.COLOR_RGB2BGR:RGB→BGR
  • cv2.COLOR_BGR2GRAY:BGR→灰度
  • cv2.COLOR_GRAY2BGR:灰度→BGR
  • cv2.COLOR_BGR2HSV:BGR→HSV
  • cv2.COLOR_HSV2BGR:HSV→BGR
  • cv2.COLOR_BGR2Lab:BGR→Lab
  • cv2.COLOR_Lab2BGR:Lab→BGR
图像读取、体现与生存

如今,让我们学习怎样利用OpenCV读取、体现和生存图像,这是盘算机视觉应用的根本利用。
图像读取

OpenCV提供了cv2.imread()函数来读取图像:
  1. [/code]
  2. python
  3. [code]image = cv2.imread('path/to/image.jpg')
复制代码
imread()有两个参数:

  • 文件路径
  • 读取标记(可选),常用的有:

    • cv2.IMREAD_COLOR:以彩色模式读取图像(默认)
    • cv2.IMREAD_GRAYSCALE:以灰度模式读取图像
    • cv2.IMREAD_UNCHANGED:读取图像,包括alpha通道(如果有)

图像体现

OpenCV利用cv2.imshow()函数体现图像:
  1. [/code]
  2. python
  3. [code]cv2.imshow('Window Name', image)
  4. cv2.waitKey(0)  # 等待按键
  5. cv2.destroyAllWindows()  # 关闭所有窗口
复制代码
图像生存

OpenCV利用cv2.imwrite()函数生存图像:
  1. [/code]
  2. python
  3. [code]cv2.imwrite('output.jpg', image)
复制代码
让我们编写一个完备的步伐来演示这些利用:
  1. [/code]
  2. python
  3. [code]import cv2
  4. import os
  5. import sys
  6. def process_image(image_path):
  7.     """读取、显示和保存图像的基本演示"""
  8.    
  9.     # 检查文件是否存在
  10.     if not os.path.isfile(image_path):
  11.         print(f"错误: 文件 '{image_path}' 不存在")
  12.         return
  13.    
  14.     # 读取图像(以彩色模式)
  15.     color_image = cv2.imread(image_path, cv2.IMREAD_COLOR)
  16.     if color_image is None:
  17.         print(f"错误: 无法读取图像 '{image_path}'")
  18.         return
  19.    
  20.     # 读取图像(以灰度模式)
  21.     gray_image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
  22.    
  23.     # 获取图像信息
  24.     height, width = color_image.shape[:2]
  25.     channels = 1 if len(color_image.shape) == 2 else color_image.shape[2]
  26.    
  27.     # 打印图像信息
  28.     print(f"图像信息:")
  29.     print(f"- 路径: {image_path}")
  30.     print(f"- 宽度 x 高度: {width} x {height} 像素")
  31.     print(f"- 通道数: {channels}")
  32.     print(f"- 数据类型: {color_image.dtype}")
  33.     print(f"- 文件大小: {os.path.getsize(image_path) / 1024:.2f} KB")
  34.    
  35.     # 创建输出文件夹
  36.     output_dir = "output"
  37.     if not os.path.exists(output_dir):
  38.         os.makedirs(output_dir)
  39.    
  40.     # 保存灰度图像
  41.     gray_output_path = os.path.join(output_dir, "gray_" + os.path.basename(image_path))
  42.     cv2.imwrite(gray_output_path, gray_image)
  43.     print(f"灰度图像已保存到: {gray_output_path}")
  44.    
  45.     # 显示图像
  46.     cv2.namedWindow("彩色图像", cv2.WINDOW_NORMAL)
  47.     cv2.namedWindow("灰度图像", cv2.WINDOW_NORMAL)
  48.    
  49.     cv2.imshow("彩色图像", color_image)
  50.     cv2.imshow("灰度图像", gray_image)
  51.    
  52.     print("按 'Esc' 键关闭窗口...")
  53.     while True:
  54.         key = cv2.waitKey(0) & 0xFF
  55.         if key == 27:  # Esc键
  56.             break
  57.    
  58.     cv2.destroyAllWindows()
  59. if __name__ == "__main__":
  60.     # 如果提供了命令行参数,使用它作为图像路径
  61.     # 否则,使用默认图像
  62.     if len(sys.argv) > 1:
  63.         image_path = sys.argv[1]
  64.     else:
  65.         # 使用内置的示例图像或当前目录中的示例图像
  66.         # 如果没有图像,将提示用户
  67.         sample_images = ["sample.jpg", "test.jpg", "image.jpg"]
  68.         found = False
  69.         
  70.         for img in sample_images:
  71.             if os.path.isfile(img):
  72.                 image_path = img
  73.                 found = True
  74.                 break
  75.         
  76.         if not found:
  77.             print("请提供图像路径作为命令行参数,或确保当前目录有示例图像。")
  78.             print("用法: python image_io.py <图像路径>")
  79.             sys.exit(1)
  80.    
  81.     process_image(image_path)
复制代码
代码讲解:

  • cv2.imread() 函数读取图像,可以选择彩色或灰度模式
  • 我们获取并打印图像的根本信息(尺寸、通道数、数据范例等)
  • cv2.imwrite() 函数将灰度图像生存到输出目次
  • cv2.namedWindow() 创建窗口,指定 cv2.WINDOW_NORMAL 答应调整窗口巨细
  • cv2.imshow() 在各自的窗口中体现彩色和灰度图像
  • cv2.waitKey(0) 等候按键,& 0xFF 确保在不同平台上准确工作
  • cv2.destroyAllWindows() 关闭全部OpenCV窗口
运行步伐:

  • 将代码生存为 image_io.py
  • 运行下令 python image_io.py path/to/your/image.jpg
  • 如果没有提供图像路径,步伐将实验在当前目次中查找示例图像
实用本领:利用matplotlib体现图像

OpenCV的imshow()函数很强盛,但偶然利用matplotlib大概更方便,特别是当你想比力多个图像时:
  1. [/code]
  2. python
  3. [code]import cv2
  4. import matplotlib.pyplot as plt
  5. # 读取图像
  6. image = cv2.imread('path/to/image.jpg')
  7. # 将BGR转换为RGB(matplotlib使用RGB顺序)
  8. image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
  9. # 使用matplotlib显示图像
  10. plt.figure(figsize=(10, 8))
  11. plt.imshow(image_rgb)
  12. plt.title('使用Matplotlib显示图像')
  13. plt.axis('off')  # 隐藏坐标轴
  14. plt.show()
复制代码
3. 根本图像利用

像素访问与修改

在OpenCV中,图像被体现为NumPy数组,因此可以直接利用NumPy的索引利用来访问和修改像素值。
访问像素值

  1. [/code]
  2. python
  3. [code]# 访问(y, x)位置的像素值(注意:先是y行,再是x列)
  4. pixel = image[y, x]
  5. # 对于灰度图像,pixel是一个标量
  6. # 对于彩色图像,pixel是一个含有B,G,R值的数组
复制代码
修改像素值

  1. [/code]
  2. python
  3. [code]# 修改(y, x)位置的像素值
  4. image[y, x] = new_value
  5. # 对于灰度图像,new_value是一个标量
  6. # 对于彩色图像,new_value是[B, G, R]
复制代码
让我们编写一个步伐来演示像素访问和修改:
  1. [/code]
  2. python
  3. [code]import cv2
  4. import numpy as np
  5. import matplotlib.pyplot as plt
  6. # 创建一个简单的图像
  7. def create_test_image():
  8.     # 创建白色背景
  9.     image = np.ones((300, 400, 3), dtype=np.uint8) * 255
  10.    
  11.     # 绘制一个蓝色矩形
  12.     cv2.rectangle(image, (50, 50), (200, 150), (255, 0, 0), thickness=-1)
  13.    
  14.     # 绘制一个绿色圆形
  15.     cv2.circle(image, (300, 150), 80, (0, 255, 0), thickness=-1)
  16.    
  17.     # 绘制红色文字
  18.     font = cv2.FONT_HERSHEY_SIMPLEX
  19.     cv2.putText(image, "OpenCV", (100, 250), font, 2, (0, 0, 255), 3)
  20.    
  21.     return image
  22. # 创建测试图像
  23. original_image = create_test_image()
  24. # 复制原始图像以便修改
  25. modified_image = original_image.copy()
  26. # 1. 单个像素修改 - 创建一个小点
  27. for i in range(-3, 4):
  28.     for j in range(-3, 4):
  29.         if i*i + j*j <= 9:  # 创建一个小圆点
  30.             y, x = 150 + i, 250 + j
  31.             modified_image[y, x] = [0, 0, 0]  # 黑色点
  32. # 2. 区域修改 - 反转一个矩形区域内的颜色
  33. x1, y1, x2, y2 = 100, 50, 150, 100
  34. roi = modified_image[y1:y2, x1:x2]
  35. modified_image[y1:y2, x1:x2] = 255 - roi
  36. # 3. 像素值分析
  37. # 获取某一点的像素值
  38. pixel_point = (300, 150)  # x=300, y=150
  39. pixel_value = original_image[pixel_point[1], pixel_point[0]]
  40. print(f"点 {pixel_point} 处的像素值 (BGR): {pixel_value}")
  41. # 获取某一区域的像素值统计
  42. roi = original_image[50:100, 150:200]
  43. mean_value = np.mean(roi, axis=(0, 1))
  44. min_value = np.min(roi, axis=(0, 1))
  45. max_value = np.max(roi, axis=(0, 1))
  46. print(f"选定区域的平均像素值 (BGR): {mean_value}")
  47. print(f"选定区域的最小像素值 (BGR): {min_value}")
  48. print(f"选定区域的最大像素值 (BGR): {max_value}")
  49. # 在图像上标记分析的位置
  50. analysis_image = original_image.copy()
  51. cv2.circle(analysis_image, pixel_point, 5, (0, 0, 0), -1)
  52. cv2.rectangle(analysis_image, (150, 50), (200, 100), (0, 0, 0), 2)
  53. # 显示结果
  54. plt.figure(figsize=(15, 5))
  55. plt.subplot(1, 3, 1)
  56. plt.imshow(cv2.cvtColor(original_image, cv2.COLOR_BGR2RGB))
  57. plt.title('原始图像')
  58. plt.axis('off')
  59. plt.subplot(1, 3, 2)
  60. plt.imshow(cv2.cvtColor(modified_image,
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表