opencv-python的简单练习

1、读取一张彩色图像并将其转换为灰度图。

import cv2
img = cv2.imread("../1iamge/a.jpg")
# 灰度化
img_gray = cv2.cvtColor(img, cv2.COLOR_BGRA2GRAY)
cv2.imshow('img', img)
cv2.imshow('img_gray', img_gray)
cv2.waitKey(0)


2、编写程序,读取一张彩色图像【flower.png】,将其转换为灰度图,然后进行二值化处理。接着,对二值化后的图像执行腐蚀和膨胀操作,并显示处理前后的图像。

import cv2
img = cv2.imread("../day2/day2.3/test2.png")
img = cv2.resize(img,(0,0),fx=0.5,fy=0.5)
# 灰度化
img_gray = cv2.cvtColor(img, cv2.COLOR_BGRA2GRAY)
#二值化
_,img_binary = cv2.threshold(img_gray,127,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
#核
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))
#腐蚀
img_erode = cv2.erode(img_binary,kernel)
#膨胀
img_dilate = cv2.dilate(img_binary,kernel)
cv2.imshow('img', img)
cv2.imshow('img_erode', img_erode)
cv2.imshow('img_dilate', img_dilate)
cv2.waitKey(0)



3、编写程序,读取一张彩色图像,执行以下操作:

  • 1.将图像缩放至指定大小(例如,宽度和高度都缩小为原来的一半)。

  • 2.对缩放后的图像应用仿射变换,实现图像的旋转(例如,旋转45度)。

  • 3.将图像从BGR颜色空间转换为HSV颜色空间,并提取出特定的颜色范围(例如,提取黄色区域)。

  • 4.显示处理后的图像,并在图像上标记出识别到的颜色区域。

 

import cv2
import numpy as np
img = cv2.imread("../1iamge/color_1.png")
#宽度和高度都缩小为原来的一半
img = cv2.resize(img,(0,0),fx=0.5,fy=0.5)
cv2.imshow('img', img)
# 灰度化
img_gray = cv2.cvtColor(img, cv2.COLOR_BGRA2GRAY)
#二值化
_,img_binary = cv2.threshold(img_gray,127,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
# 对缩放后的图像应用仿射变换,实现图像的旋转
M = cv2.getRotationMatrix2D((img.shape[1],img.shape[0]),45,0.5)
img_affine = cv2.warpAffine(img,M,(img.shape[1],img.shape[0]),flags=cv2.INTER_LINEAR,borderMode=cv2.BORDER_WRAP)
cv2.imshow('img_affine',img_affine)
#将图像从BGR颜色空间转换为HSV颜色空间,并提取出特定的颜色范围
img_hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
#掩膜
blue_min = np.float32([35,43,46])
blue_max = np.float32([77,255,255])
img_mask = cv2.inRange(img_hsv,blue_min,blue_max)
img_mask_color = cv2.bitwise_and(img,img,mask = img_mask)
cv2.imshow("img_mask_color",img_mask_color)
cv2.waitKey(0)

 
4、编写程序,读取一张彩色图像,执行以下操作

  • 1.找到原图 和目标图的四个点,获取透视变换矩阵

  • 2.对图像应用透视变换,实现油画区域的矫正

import cv2
import numpy as npimg = cv2.imread("../1iamge/youhua.png")
points1 = np.float32([[174,141],[622,40],[88,493],[650,549]])
points2 = np.float32([[0,0],[img.shape[1],0],[0,img.shape[0]],[img.shape[1],img.shape[0]]])
M = cv2.getPerspectiveTransform(points1,points2)
img_warp = cv2.warpPerspective(img,M,(img.shape[1],img.shape[0]))
cv2.imshow('img',img)
cv2.imshow("img_warp",img_warp)
cv2.waitKey(0)

 

5、图像轮廓检测与绘制

  • 1.将图像转换为灰度图。

  • 2.使用高斯滤波器平滑图像,内核大小为5x5,标准差为1。

  • 3.使用Canny边缘检测算法检测图像边缘,阈值1为50,阈值2为150。

  • 4.在检测到的边缘图像上绘制轮廓,轮廓颜色为红色,厚度为2。

import cv2
import numpy as np
img = cv2.imread("../1iamge/tubao.png")
#灰度化
img_gray = cv2.cvtColor(img,cv2.COLOR_BGRA2GRAY)
#高斯滤波
img_blur = cv2.GaussianBlur(img_gray,(5,5),1)
#使用Canny边缘检测算法检测图像边缘,阈值1为50,阈值2为150。
img_canny = cv2.Canny(img_blur,50,150)
#选框
contours,_ = cv2.findContours(img_canny,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
#绘制
img_copy = img.copy()
img_draw = cv2.drawContours(img_copy,contours,-1,(0,0,255),2)cv2.imshow('img',img)
cv2.imshow("img_draw",img_draw)
cv2.waitKey(0)

 

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

思路分析‌:

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

 

import cv2
import numpy as np#读取包含交通信号灯的图像。
img = cv2.imread("../1iamge/demo111.png")
img_copy = img.copy()
#转换图像到HSV颜色空间。
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
#分别为红、黄、绿三种颜色定义HSV范围,并创建三个掩膜。
lower_red = np.array([156, 43, 46])
upper_red = np.array([180, 255, 255])
mask_red = cv2.inRange(img_hsv, lower_red, upper_red)
lower_yellow = np.array([0, 43, 46])
upper_yellow = np.array([10, 255, 255])
mask_yellow = cv2.inRange(img_hsv, lower_yellow, upper_yellow)
lower_green = np.array([35, 43, 46])
upper_green = np.array([77, 255, 255])
mask_green = cv2.inRange(img_hsv, lower_green, upper_green)
#对每个掩膜进行轮廓检测,识别出可能的信号灯区域。
contours, _ = cv2.findContours(mask_red, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:area = cv2.contourArea(cnt)if area > 300:x, y, w, h = cv2.boundingRect(cnt)img_copy = cv2.rectangle(img_copy, (x, y), (x + w, y + h), (0, 0, 255), 2)
contours, _ = cv2.findContours(mask_yellow, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:area = cv2.contourArea(cnt)if area > 300:x, y, w, h = cv2.boundingRect(cnt)img_copy = cv2.rectangle(img_copy, (x, y), (x + w, y + h), (0, 255, 255), 2)
contours, _ = cv2.findContours(mask_green, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:area = cv2.contourArea(cnt)if area > 300:x, y, w, h = cv2.boundingRect(cnt)img_copy = cv2.rectangle(img_copy, (x, y), (x + w, y + h), (0,255, 0), 2)
cv2.imshow("img", img)
cv2.imshow("img_copy", img_copy)
cv2.waitKey(0)

 

‌7、产品质量检测‌:

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

‌思路分析‌:

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

import cv2
import numpy as np# 读取图像
img = cv2.imread('../1iamge/duck.png')
img = cv2.resize(img, (600, 600))
img_copy = img.copy()
# 将BGR图像转换为HSV图像
hsv = cv2.cvtColor(img_copy, cv2.COLOR_BGR2HSV)# 定义橡皮鸭的标准颜色范围(HSV值)
colors = {'red': {'min': np.array([0, 100, 100]), 'max': np.array([10, 255, 255]), 'color': (0, 0, 255)},'blue': {'min': np.array([70, 50, 50]), 'max': np.array([130, 255, 255]), 'color': (255, 0, 0)},'yellow': {'min': np.array([20, 100, 100]), 'max': np.array([30, 255, 255]), 'color': (0, 255, 255)},'green': {'min': np.array([50, 100, 100]), 'max': np.array([70, 255, 255]), 'color': (0, 255, 0)},'pink': {'min': np.array([130, 100, 100]), 'max': np.array([170, 255, 255]), 'color': (170, 160, 255)},'black': {'min': np.array([0, 0, 0]), 'max': np.array([180, 50, 50]), 'color': (0, 0, 0)},
}# 检测并标记每种颜色的橡皮鸭
for color_name, color_range in colors.items():mask = cv2.inRange(hsv, color_range['min'], color_range['max'])contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)for contour in contours:if cv2.contourArea(contour) > 100:  # 忽略太小的区域x, y, w, h = cv2.boundingRect(contour)cv2.rectangle(img_copy, (x, y), (x + w, y + h), color_range['color'], 2)cv2.putText(img_copy, color_name, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, color_range['color'], 1)# 显示结果
cv2.imshow('img', img)
cv2.imshow('img_copy', img_copy)# 等待按键按下
cv2.waitKey(0)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/490302.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java、鸿蒙与嵌入式开发:技术选择与职业发展分析

在当今快速发展的科技领域中,Java、鸿蒙和嵌入式开发代表着不同的技术方向和职业机遇。每个方向都有其独特的市场价值和发展前景,让我们深入分析这三个领域的特点、发展趋势和职业规划。 Java开发方向已经发展了二十多年,仍然在软件开发领域…

【mybatis】缓存

目录 1. mybatis的运行 1.1 引言 1.2 具体运行: 1.3 sqlSession 介绍local catch 2. 缓存 2.1 概念 2.2 使用缓存的原因 2.3 什么样的数据能使用缓存 3. Mybatis缓存 3.1 一级缓存 3.1.1 测试一级缓存 3.1.2 缓存失效的四种情况 $1 sqlSession不同 $…

前端成长之路:CSS元素显示模式

元素显示模式 网页中的标签非常的多,在不同的地方会使用到不同类型的标签,了解这些标签的特点可以更好的布局我们的网页。 元素显示模式就是元素(标签)按照什么方式进行显示,比如:div标签会自己独占一行&a…

Unity类银河战士恶魔城学习总结(P178 Archer s arrow 弓箭手的箭)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/ 本章节制作了一个弓箭手的箭 Arrow_Controller.cs 1.OnTriggerEnter2D方法 功能:检测箭矢与其他对象的碰撞。逻辑&#xff1…

机器学习周报(12.9-12.15)

文章目录 摘要Abstract 1 Swin Transformer1.1 输入1.2 Patch Partition1.3 Linear Embedding1.4 Patch Merging1.5 Swin Transformer Block1.6 代码总结 摘要 本篇博客介绍了采用类似于卷积核的移动窗口进行图像特征提取的Swin Transformer网络模型,这是一种基于T…

【C++游记】Vector的使用和模拟实现

枫の个人主页 你不能改变过去,但你可以改变未来 算法/C/数据结构/C Hello,这里是小枫。C语言与数据结构和算法初阶两个板块都更新完毕,我们继续来学习C的内容呀。C是接近底层有比较经典的语言,因此学习起来注定枯燥无味&#xf…

Jenkins流水线初体验(六)

DevOps之安装和配置 Jenkins (一) DevOps 之 CI/CD入门操作 (二) Sonar Qube介绍和安装(三) Harbor镜像仓库介绍&安装 (四) Jenkins容器使用宿主机Docker(五) Jenkins流水线初体验(六) 一、Jenkins流水线任务介绍 之前采用Jenkins的自由风格构建的项目,每个步骤…

Android后端签到flask迁移到rust的axum的过程-签到性能和便携

本次变更了以下内容: 为了使用之前ip2sta的ip到端点名的python,dic变量,将其存入redis hashset.使用地址/api/ip2dic 手动执行之.并且定义在/station/init,这个每天初始化redis的路径下.在rust axum使用redis 连接池在test中 ip2dic,IP转端点名,转本日此端网址.在前端的人名下…

Python OCR文字识别api接口

一.引言 文字识别,也称为光学字符识别(Optical Character Recognition, OCR),是一种将不同形式的文档(如扫描的纸质文档、PDF文件或数字相机拍摄的图片)中的文字转换成可编辑和可搜索的数据的技术。随着技…

.NET 6.0 中接入 Log4net 和 NLog

一、接入Log4net 1.按日期和大小混合分割日志 nuget包安装 log4net Microsoft.Extensions.Logging.Log4Net.AspNetCore 配置文件 配置文件内容为 <?xml version"1.0" encoding"utf-8"?> <log4net> <!-- Define some output appe…

编写php项目所需环境

需要编写php项目&#xff0c;需要看到编写的代码展现的效果&#xff0c;这里我选择用xampp来展现 准备工作&#xff1a; https://learncodingfast.com/how-to-install-xampp-and-brackets/#Installing_and_Running_XAMPP xampp下载地址&#xff1a;https://www.apachefriends.…

树莓派Pico火灾报警器项目:基于火焰传感器、蜂鸣器与LED的C++实现

火灾是我们生活中一个不可忽视的安全隐患,而火灾报警系统在预防火灾和保障人员安全方面起着至关重要的作用。通过嵌入式技术,我们可以实现一个简单而有效的火灾报警装置。在本项目中,我们将利用 树莓派Pico 控制 火焰传感器、LED 和 蜂鸣器,模拟火灾报警装置的工作原理。本…

数学建模问题中的多目标规划

多目标规划&#xff08;Multi-Objective Optimization, MOO&#xff09;是指在优化问题中同时优化多个相互冲突的目标函数的情况。与单目标优化问题不同&#xff0c;多目标优化的解通常不再是唯一的&#xff0c;而是一个解的集合&#xff0c;称为帕累托最优解集。这些解在所有目…

智汇云舟4个案例入选“中国联通智慧城市物联感知与AI应用案例”

12月10日&#xff0c;由中国联通智慧城市军团联合联通数字科技有限公司物联网事业部、物联中国团体组织联席会共同主办的“中国联通首届智慧城市领域物联感知与AI应用优秀案例发布交流大会”在郑州举行。大会现场对50余个优秀案例进行了集中发布与表彰。智汇云舟凭借深厚的技术…

【JavaEE】网络(1)

&#x1f435;本篇文章开始讲解计算机网络相关的知识 一、基础概念 1.1 局域网和广域网 局域网→Local Area Network→简称LAN&#xff0c;局域网是局部组建的一种私有网络&#xff0c;局域网内的主机之间可以进行网络通信&#xff0c;局域网和局域网之间在没有连接的情况不能…

Unity 模板测试透视效果(URP)

可以实现笼中窥梦和PicoVR中通过VST局部透视效果。 使用到的Shader: Shader "Unlit/StencilShader" {Properties{[IntRange]_Index("Stencil Index",Range(0,255))0}SubShader{Tags{"RenderType""Opaque""Queue""Geo…

川渝地区软件工程考研择校分析

通过最新数据分析,5所高校软件工程专业2025年考研难度从高到低预计为: 电子科技大学 >> 四川大学 > 重庆大学 ≈ 西南交通大学 > 西南大学 对于想考川渝地区985但核心目标为优先上岸的考生,建议重点考虑西南交通大学软件工程学硕。该校24届软件工程学硕实际录取1…

KeepAlive与RouterView缓存

参考 vue动态组件&#xff1c;Component&#xff1e;与&#xff1c;KeepAlive&#xff1e; KeepAlive官网介绍 缓存之keep-alive的理解和应用 Vue3Vite KeepAlive页面缓存问题 vue多级菜单(路由)导致缓存(keep-alive)失效 vue3 router-view keeperalive对于同一路径但路径…

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(五)

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(五) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《拉…

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(四)

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(四) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《拉…