OpenCV的简单练习

交通信号灯识别‌:

你正在开发一个自动驾驶系统,需要识别交通信号灯的颜色(红、黄、绿)。请设计一个简化的流程,说明如何使用OpenCV来识别交通信号灯的颜色。

思路分析‌:

  1. 读取包含交通信号灯的图像。
  2. 转换图像到HSV颜色空间。
  3. 分别为红、黄、绿三种颜色定义HSV范围,并创建三个掩膜。
  4. 对每个掩膜进行轮廓检测,识别出可能的信号灯区域。
python 复制代码
import cv2
import numpy as np

# 读取图像
img = cv2.imread('./1.png')

# 转换到HSV颜色空间
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# 定义颜色范围并创建掩膜
yellow_min = np.array([26, 43, 46])
yellow_max = np.array([34, 255, 255])
img_mask1 = cv2.inRange(img_hsv, yellow_min, yellow_max)

green_min = np.array([35, 43, 46])
green_max = np.array([77, 255, 255])
img_mask2 = cv2.inRange(img_hsv, green_min, green_max)

# 红色范围(低红和高红)
red_min1 = np.array([0, 120, 70])
red_max1 = np.array([10, 255, 255])
red_min2 = np.array([170, 120, 70])
red_max2 = np.array([180, 255, 255])
img_mask3 = cv2.inRange(img_hsv, red_min1, red_max1)
img_mask4 = cv2.inRange(img_hsv, red_min2, red_max2)

# 合并掩膜
img_mask = cv2.bitwise_or(img_mask1, img_mask2)
img_mask = cv2.bitwise_or(img_mask, img_mask3)
img_mask = cv2.bitwise_or(img_mask, img_mask4)

# 轮廓检测
contours, _ = cv2.findContours(img_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 绘制轮廓
for contour in contours:
    # 计算轮廓的面积
    area = cv2.contourArea(contour)
    if area > 500:
        # 绘制轮廓
        cv2.drawContours(img, [contour], -1, (0, 255, 0), 3)


img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

img_b=cv2.adaptiveThreshold(
    img_gray,
    244,
    cv2.ADAPTIVE_THRESH_MEAN_C,
    cv2.THRESH_BINARY,
    9,
    5
                                )

# 显示原图和结果图
cv2.imshow('img', img)
cv2.imshow('img_mask', img_mask)
cv2.imshow('img_b', img_b)

cv2.waitKey(0)

产品质量检测‌:

在一家生产彩色玩具的工厂中,需要检测产品是否按照正确的颜色进行生产。请设计一个使用OpenCV的自动化检测系统,该系统能够识别并报告不符合颜色标准的产品。

‌思路分析‌:

  1. 设定产品的标准颜色范围(HSV值)。
  2. 使用摄像头或图像文件获取待检测产品的图像。
  3. 转换图像到HSV颜色空间。
  4. 为每种标准颜色创建掩膜,并与产品图像进行比对。
  5. 识别出颜色不符合标准的产品,并记录或报告。
python 复制代码
import cv2
import numpy as np

# 读取图像
img = cv2.imread('./2.png')
img=cv2.resize(img,(800,800))

# 转换到HSV颜色空间
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# 定义颜色范围并创建掩膜
yellow_min = np.array([26, 43, 46])
yellow_max = np.array([34, 255, 255])
img_mask = cv2.inRange(img_hsv, yellow_min, yellow_max)


# 轮廓检测
contours, _ = cv2.findContours(img_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 绘制轮廓
for contour in contours:
    # 计算轮廓的面积
    area = cv2.contourArea(contour)
    if area > 100:  # 只选择面积较大的轮廓(可以根据实际情况调整阈值)
        # 绘制轮廓
        cv2.drawContours(img, [contour], -1, (0, 255, 0), 3)

# 显示原图和结果图
cv2.imshow('img', img)
cv2.imshow('img_mask', img_mask)
cv2.waitKey(0)

图像预处理与特征提取‌

  1. 将图像转换为灰度图
  2. 对灰度图进行二值化处理
  3. 使用形态学变换去除噪声【开运算】
  4. 检测图像中的边缘
  5. 查找并绘制图像中的轮廓
  6. 逐一遍历轮廓,输出所有四边形的周长 和 面积。

车牌识别预处理‌

假设你正在开发一个车牌识别系统,首先需要从图像中识别出车牌区域。请描述并编写代码实现以下步骤:

  1. 读取一张包含车牌的图像。
  2. 将图像转换为灰度图以简化处理。
  3. 使用高斯滤波器平滑图像,减少噪声干扰。
  4. 应用Canny边缘检测算法检测图像中的边缘。
  5. 查找图像中的轮廓。
  6. 逐一遍历轮廓。
  7. 设定一个面积双阈值,只保留面积在该阈值的轮廓。
  8. 计算这些轮廓的长宽比,长宽比ratio在2到5.5之间的,在原图上用矩形框标出,这些轮廓可能是车牌的候选区域。
相关推荐
Blossom.11824 分钟前
基于时序大模型+强化学习的虚拟电厂储能调度系统:从负荷预测到收益最大化的实战闭环
运维·人工智能·python·决策树·机器学习·自动化·音视频
百胜软件@百胜软件1 小时前
重塑零售未来:百胜智能中台+胜券AI,赋能品牌零售撬动3100亿增量市场
大数据·人工智能·零售
Shawn_Shawn7 小时前
人工智能入门概念介绍
人工智能
极限实验室7 小时前
程序员爆哭!我们让 COCO AI 接管 GitLab 审查后,团队直接起飞:连 CTO 都说“这玩意儿比人靠谱多了
人工智能·gitlab
Maynor9968 小时前
Z-Image: 100% Free AI Image Generator
人工智能
爬点儿啥8 小时前
[Ai Agent] 10 MCP基础:快速编写你自己的MCP服务器(Server)
人工智能·ai·langchain·agent·transport·mcp
张人玉9 小时前
百度 AI 图像识别 WinForms 应用代码分析笔记
人工智能·笔记·百度
sali-tec9 小时前
C# 基于halcon的视觉工作流-章68 深度学习-对象检测
开发语言·算法·计算机视觉·重构·c#
测试人社区-小明9 小时前
智能弹性伸缩算法在测试环境中的实践与验证
人工智能·测试工具·算法·机器学习·金融·机器人·量子计算
Spring AI学习9 小时前
Spring AI深度解析(9/50):可观测性与监控体系实战
java·人工智能·spring