opencv-python的简单练习

server/2024/12/23 3:30:17/

文章目录

  • 识别信号灯
  • 识别图案并且标记面积和周长

识别信号灯

需要识别交通信号灯的颜色(红、黄、绿)。请设计一个简化的流程,说明如何使用OpenCV来识别交通信号灯的颜色。
思路分析‌:
1.读取包含交通信号灯的图像。
2.转换图像到HSV颜色空间。
3.分别为红、黄、绿三种颜色定义HSV范围,并创建三个掩膜。
4.对每个掩膜进行轮廓检测,识别出可能的信号灯区域。

python">import cv2
import numpy as np
import matplotlib.pyplot as pltlamp = cv2.imread("deng.png")
lamp_hsv = cv2.cvtColor(lamp, cv2.COLOR_BGR2HSV)g_min = np.array([35,43,46])
g_max = np.array([77,255,255])
lamp_gmask = cv2.inRange(lamp_hsv, g_min, g_max)
lamp_gmask = cv2.erode(lamp_gmask, None, iterations=1)
lamp_gmask = cv2.dilate(lamp_gmask, None, iterations=10)y_min = np.array([8,43,46])
y_max = np.array([20,255,255])
lamp_ymask = cv2.inRange(lamp_hsv, y_min, y_max)
lamp_ymask = cv2.erode(lamp_ymask, None, iterations=1)
lamp_ymask = cv2.dilate(lamp_ymask, None, iterations=10)r_min = np.array([155,0,0])
r_max = np.array([170,255,255])
lamp_rmask = cv2.inRange(lamp_hsv, r_min, r_max)
lamp_rmask = cv2.erode(lamp_rmask, None, iterations=1)
lamp_rmask = cv2.dilate(lamp_rmask, None, iterations=10)result = cv2.bitwise_and(lamp, lamp, mask=lamp_rmask)cv2.imshow("result", result)
cv2.waitKey(0)

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

识别图案并且标记面积和周长

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

python">import cv2
# 读取图像
image = cv2.imread('02.png')
# 转换为灰度图
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 使用阈值化方法进行二值化
_, binary_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)
# 定义结构元素
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))# 开运算
opening = cv2.morphologyEx(binary_image, cv2.MORPH_OPEN, kernel)
# 使用Canny边缘检测
edges = cv2.Canny(opening, 100, 200)
# 查找轮廓
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 绘制轮廓
cv2.drawContours(image, contours, -1, (0, 255, 0), 2)for contour in contours:# 近似轮廓为多边形epsilon = 0.02 * cv2.arcLength(contour, True)approx = cv2.approxPolyDP(contour, epsilon, True)# 如果近似的多边形有四个顶点,则认为是四边形if len(approx) == 4:# 计算周长perimeter = cv2.arcLength(contour, True)# 计算面积area = cv2.contourArea(contour)# 在图像上显示周长和面积x, y, w, h = cv2.boundingRect(contour)cv2.putText(image, f': {perimeter:.2f}', (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)cv2.imshow('Contours', image)   
cv2.waitKey(0)

http://www.ppmy.cn/server/152393.html

相关文章

Sigrity System Explorer Snip Via Pattern From Layout模式从其它设计中截取过孔模型和仿真分析操作指导

Sigrity System Explorer Snip Via Pattern From Layout模式从其它设计中截取过孔模型和仿真分析操作指导 Sigrity System Explorer Snip Via Pattern From Layout模式支持从其它设计中截取过孔模型用于仿真分析,同样以差分模板为例 具体操作如下 双击打开System Explorer软件…

MySQL结构的主要组成

MySQL 架构主要由以下几个部分组成: 一、连接层 当客户端连接到 MySQL 服务器时,连接层负责建立连接、验证用户身份、进行权限检查等操作。 1. 连接管理 处理客户端的连接请求,包括建立连接、断开连接等操作。维护连接池,提高连接…

35. Three.js案例-创建带阴影的球体与平面

35. Three.js案例-创建带阴影的球体与平面 实现效果 知识点 WebGLRenderer WebGLRenderer 是Three.js中用于渲染场景的主要类之一,它负责将场景中的对象渲染到画布上。 构造器 new THREE.WebGLRenderer(parameters : Object) 参数类型描述parametersObject可选…

STM32, GD32 cubemx CAN 低速率125kbps 报文丢失,解决了

用STM32 CUBEMX生成的GD32的 can程序,在500K波特率时可以正常使用,没有发现丢包,但速率降到250k和125k时,发送138帧数据,会丢失5个包。(系统时钟168M,APB1的时钟42M) 试了各种方法无…

华为DHCP高级配置学习笔记

1.基于接口的DHCP配置 1.1配置R1 sys sysname R1 undo info-center enable dhcp enable 全局下开启DHCP功能 interface Ethernet0/0/0 ip address 192.168.1.1 255.255.255.0 dhcp select interface 在e0/0/0接口上启用基于接口的 DHCP服务 dhcp server dns-list 114.11…

基于Python Scrapy的豆瓣Top250电影爬虫程序

Scrapy安装 Python实现一个简单的爬虫程序(爬取图片)_python简单扒图脚本-CSDN博客 创建爬虫项目 创建爬虫项目: scrapy startproject test_spider 创建爬虫程序文件: >cd test_spider\test_spider\spiders >scrapy g…

【守护进程 】【序列化与反序列化】

目录 1. 前后台任务2. 守护进程3. TCP的其它概念4. 序列化与反序列化 1. 前后台任务 我们之前在 信号(一)【概念篇】 介绍过 Crtl c 的本质就是给前台进程发送一个信号,进程执行该信号的默认处理动作,进而终止进程,随…

文献研读|基于像素语义层面图像重建的AI生成图像检测

前言:本篇文章主要对基于重建的AI生成图像检测的四篇相关工作进行介绍,分别为基于像素层面重建的检测方法 DIRE 和 Aeroblade,以及基于语义层面重建的检测方法 SimGIR 和 Zerofake;并对相应方法进行比较。 相关文章:论…