初学opencv
初学opencv首先要下载cv2库导包import cv2 as cv2一.读取1.读取与显示图片操作读取图片用的是cv2里的imread函数参数是图片的路径绝对路径和相对路径都可以# 读取图片 a cv2.imread(./03.jpg)显示图片用的是cv2里的imshow函数参数是图片的名称图片的数据cv2.imshow(tu,a) # 显示图片。显示图片的名称显示图片的数据。如果只有imshow函数那么运行代码后图片会闪一下就消失了想要图片保留就要设置窗口显示的时间这里用到的是waitkey函数里面的参数表示显示的时间单位是毫秒0代表窗口显示时间是永久。按一下键盘上的按键图片会关闭waitkey函数有一个返回值获取的是按键的ASCII码值。b cv2.waitKey(0)关闭所有打开的窗口并释放所有相关内存。cv2.destroyAllWindows() #关团所有打开的窗口并释放所有相关内存。对于简单的程序不需要调用这些函数应用程序的所有资源和窗口在退出时都会由操作系统自动关闭。2.观察图像的属性#调试模型观察shapedtupe、size属性 print(图像形状shape:,a.shape) #高、宽、通道数 print(图像数据类型dtype:,a.dtype) #无符号 8 位整数用于表示像素值的范围在 0 到 255 之间。 print(图像大小size:,a.size) #表示图像的大小通常是一个整数表示图像的总像素数即图像的高度乘以宽度乘以通道数图像形状shape: (800, 800, 3)图像数据类型dtype: uint8图像大小size: 1920000图像的形状为高宽通道数图像的数据类型是uint8无符号8位整数用于表示像素值的范围在0到255之间。图像的大小通常是一个整数表示图像的总像素数即图像的高度乘以宽度乘以通道数。3.读取灰度图b cv2.imread(./03.jpg,cv2.IMREAD_GRAYSCALE) cv2.imshow(xx,b) a cv2.waitKey(0) cv2.destroyAllWindows()读取灰度图的方法有多种一是在读取图片的时候在imread里面添加cv2.IMREAD_GRAYSCALE参数表示读取灰度图二是在这个位置添0三是使用cvtColor函数需要传入的参数是srccodesrc代表原图code代表方法这里使用COLOR_RGB2GRAY。b cv2.imread(./03.jpg,0)c cv2.cvtColor(b,cv2.COLOR_RGB2GRAY)4.图片保存图片保存使用imwrite函数参数是要保存的路径和图片数据。cv2.imwrite(03_GRAY.jpg,b)5.ROI区域感兴趣ROI指的是图像或视频中感兴趣的特定区域需要进行分析或处理。ROI可以由用户手动选择也可以使用计算机视觉算法自动检测。b a[100:500,150:500] cv2.imshow(qiepian,b)二.操作1.提取颜色通道a1 a[:,:,0] # 蓝色通道(B通道) a2 a[:,:,1] # 绿色通道(G通道) a3 a[:,:,2] # 红色通道(R通道)根据前面的shape属性我们可以通过切片提取BGR三个通道的数据或者我们可以使用cv2.split()来分离颜色通道。b,g,r cv2.split(a)那么如果我们有三个通道的数据也可以合成原图像。这里使用的是merge函数参数是三个通道的数据。img cv2.merge((a1,a2,a3)) cv2.imshow(result3,img) cv2.waitKey(0) cv2.destroyAllWindows()1.图片修改图片打码xxx np.random.randint(0,256,(3,3))用的是numpy库里的random.randint方法得到的是0-2553x3的随机整数。# 图片打码 a[350:450,250:450] np.random.randint(0,256,(100,200,3)) cv2.imshow(feilinsi,a) cv2.waitKey(0) cv2.destroyAllWindows()注意打码的范围必须与图片切片的范围一致切片的大小为100x200生成的随机整数是0-255100x200三个通道。图片组合a cv2.imread(./03.jpg) b cv2.imread(./04.jpg) a[350:450,250:450] b[50:150,200:400] cv2.imshow(b,b) cv2.imshow(a,a) cv2.waitKey(0) cv2.destroyAllWindows()图片组合与上述的切片打码有相似之处两张图片组合的地方大小必须一致。图片缩放图片缩放用的cv2.resize方法里面的参数是1.src要调整大小的输入图像可以是numpy数组PIL图像或其他类型。2.dsize输出图像的大小可以是一个元组列如宽高或者使用整数标量来缩放原始图像。如果为NONE则根据scalefx和scalefy缩放原始图像。3.fx沿x轴的缩放系数。4.fy沿y轴的缩放系数。a cv2.imread(04.jpg) # a_new cv2.resize(a,(200,200))# 宽、高 a_new cv2.resize(a,None,fx0.5,fy0.5) cv2.imshow(a.a) cv2.imshow(a_new,a_new) cv2.waitKey(0) cv2.destroyAllWindows()读取图片04使用resize对图片操作参数a原图像None根据位置传递是指dsizeNonefx0.5fy0.5表示沿xy方向变为原来的二分之一。后面展示图片设置图片停留时间等。三.图像运算1.图像加法运算1.图像加法运算对于号运算当对图像a图像b进行加法求和时遵循以下规则1.当某位置像素相加得到的数值小于255时该位置数值为两图像数值相加的和。2.当某位置像素相加得到的数值大于255时该位置数值将截断结果并减去256列如相加后是260实际为260-2564d a[50:450,50:400] b[50:450,50:400] cv2.imshow(ab,d) cv2.waitKey(0) cv2.destroyAllWindows()运行结果图2.add对于cv2.add()运算当对图像ab进行加法求和时遵循以下规则1.当某位置像素相加得到的数值小于255时该位置数值为两图像数值相加之和。2.当某位置像素相加得到的数值大于255时该位置数值为255.a cv2.imread(./03.jpg) b cv2.imread(./04.jpg) a cv2.resize(a,(400,400)) b cv2.resize(b,(400,400)) c cv2.add(a,b) cv2.imshow(a add b,c) cv2.waitKey(0) cv2.destroyAllWindows()代码分别读入图像ab使用resize更改图像的大小为(400,400),使用add方法将ab加起来命名为c展示图像设置图片停留时间等。运行结果可以看到超过255的值都变为255即为白色。3.图像加权运算图像的加权运算规则1.在计算两幅图像的像素值之和时将每幅图像的权重考虑进来用公式表示为d cv2.addWeighted(a,0.5,b,0.5,10) #10:图像的亮度值(常数)将添加到加权和上 cv2.imshow(addWeighted,d) cv2.waitKey(0) cv2.destroyAllWindows()参数src1alphasrc2betagamma图像1权重a图像2权重b权重c四.边界填充cv2.copyMakeBorder()是OpenCV库中的一个函数用于给图像添加额外的边界(padding)。它有以下几个参数:1.src:要扩展边界的原始图像。2.topbottomleftright:相应方向上的边框宽度。3.borderType:定义要添加边框的类型它可以是以下的一种:cv2.BORDER_CONSTANT: 添加的边界框像素值为常数(需要额外再给定一个参数value)。cv2.BORDER_REFLECT: 添加的边框像素将是边界元素的镜面反射类似于 gfedcba|abcdefgh|hgfedcba。(交界处也复制了)cv2.BORDER_REFLECT_101或cv2.BORDER_DEFAULT: 和上面类似但是有一些细微的不同类似于 gfedcb|abcdefgh|gfedcba (交接处删除了)。cv2.BORDER_REPLICATE: 使用最边界的像素值代替类似于 aaaaaa|abcdefgh|hhhhhhh。cv2.BORDER_WRAP: 上下左右边依次替换cdefgh|abcdefgh|abcdefg。4.dst: 输出图像可选参数。import cv2 a cv2.imread(./03.jpg) a cv2.resize(a,(400,400)) top,bottom,left,right 50,50,50,50 cv2.imshow(yuantu,a) cv2.waitKey(0)读入数据更改数据的大小设置topbottomleftright:相应方向上的边框宽度为50先展示一下原图。1.cv2.BORDER_CONSTANT操作constant cv2.copyMakeBorder(a,top,bottom,left,right, borderTypecv2.BORDER_CONSTANT,value(229,25,80)) cv2.imshow(CONSTANT,constant) cv2.waitKey(0)填充后的结果图2.cv2.BORDER_REFLECT操作reflect cv2.copyMakeBorder(a,top,bottom,left,right, borderTypecv2.BORDER_REFLECT) cv2.imshow(REFLECT,reflect) cv2.waitKey(0)填充后的结果图3.其它操作reflect101 cv2.copyMakeBorder(a,top,bottom,left,right, borderTypecv2.BORDER_REFLECT101) replicate cv2.copyMakeBorder(a,top,bottom,left,right, borderTypecv2.BORDER_REPLICATE) wrap cv2.copyMakeBorder(a,top,bottom,left,right, borderTypecv2.BORDER_WRAP) cv2.imshow(REFLECT_101,reflect101) cv2.waitKey(0) cv2.imshow(REPLICATE,replicate) cv2.waitKey(0) cv2.imshow(WRAP,wrap) cv2.waitKey(0)填充后的结果图五.阈值处理阈值处理是指剔除图像内像素值高于一定值或低于一定值的像素点。使用的方法为retval, dst cv2.threshold(src, thresh, maxval, type)参数说明src要进行阈值分割的图像可以是多通道的8位或32位浮点型数值。thresh要设定的阈值。maxval当type参数为THRESH_BINARY或者THRESH_BINARY_INV类型时需要设定的最大值。retval返回的阈值。dst阈值分割结果图像与原始图像具有相同的大小和类型。type阈值分割的类型具体内容如下表所示选项像素值 thresh其他情况CV2.THRESH_BINARYmaxval0CV2.THRESH_BINARY_INV0maxvalCV2.THRESH_TRUNCthresh当前灰度值CV2.THRESH_TOZERO当前灰度值0CV2.THRESH_TOZERO_INV0当前灰度值import cv2 image cv2.imread(./03.jpg,0) image cv2.resize(image,(400,400)) ret,binary cv2.threshold(image,175,255,cv2.THRESH_BINARY) ret1,binaryinv cv2.threshold(image,175,225,cv2.THRESH_BINARY_INV) ret2,trunc cv2.threshold(image,175,225,cv2.THRESH_TRUNC) ret3,tozero cv2.threshold(image,175,225,cv2.THRESH_TOZERO) ret3,tozeroinv cv2.threshold(image,175,225,cv2.THRESH_TOZERO_INV) cv2.imshow(gray,image) cv2.waitKey(0) cv2.imshow(binary,binary) # 偏白的变纯白偏黑的变纯黑 cv2.waitKey(0) cv2.imshow(binaryinv,binaryinv) #偏白的变纯黑偏黑的变纯白 cv2.waitKey(0) cv2.imshow(trunc,trunc) #白色变得一样灰蒙蒙偏黑的不变 cv2.waitKey(0) cv2.imshow(tozero,tozero) #偏白色不变偏黑的就变纯黑 cv2.waitKey(0) cv2.imshow(tozeroinv,tozeroinv) #偏白色变纯黑偏黑的不变 cv2.waitKey(0)运行结果分别是灰度图graybinary操作图binaryinv操作图trunc操作图tozero操作图tozeroinv操作图。

相关新闻

2026绿色能源与电力系统国际会议(ICGEPS)技术前瞻

2026绿色能源与电力系统国际会议(ICGEPS)技术前瞻

1. 会议背景与行业定位绿色能源与电力系统国际学术会议(ICGEPS)作为该领域的重要学术交流平台,已经成功举办四届。2026年第五届会议将聚焦全球能源转型背景下的技术创新与系统整合,特别关注可再生能源并网、智能电网优化和储能技术…

2026/8/12 18:11:23 阅读更多 →
Grafana 9生产环境部署与核心特性实战指南

Grafana 9生产环境部署与核心特性实战指南

1. 为什么现在要关注Grafana 9?一次部署背后的价值思考最近在梳理监控体系,发现很多团队还在用着Grafana 7甚至更老的版本,每次想用个新面板或者联动个新数据源都挺费劲。正好Grafana 9系列已经稳定发布了一段时间,我决定把生产环…

2026/8/12 18:11:23 阅读更多 →
前端三件套实战:从零打造火影忍者主题响应式静态网页

前端三件套实战:从零打造火影忍者主题响应式静态网页

1. 项目概述:一个融合情怀与技术的静态网页实践最近在整理个人作品集,想找一个既能展示前端基础三件套(HTML、CSS、JavaScript)综合运用,又有点意思的练手项目。翻看硬盘里的老素材,看到了多年前收藏的《火…

2026/8/12 18:11:22 阅读更多 →

最新新闻

中兴B860AV2.1-T机顶盒线刷当贝桌面全流程与避坑指南

中兴B860AV2.1-T机顶盒线刷当贝桌面全流程与避坑指南

1. 项目概述:中兴B860AV2.1-T 3.0机顶盒的“新生”之路 手头有一台中兴B860AV2.1-T 3.0的机顶盒,这玩意儿是运营商定制版的典型产物。开机慢、预装应用多且无法卸载、桌面臃肿、各种限制……相信折腾过这类盒子的朋友都深有体会。它本质上是一台搭载了Am…

2026/8/12 19:02:40 阅读更多 →
终极HLS流媒体下载神器:5分钟掌握HLSDownloader完整使用教程

终极HLS流媒体下载神器:5分钟掌握HLSDownloader完整使用教程

终极HLS流媒体下载神器:5分钟掌握HLSDownloader完整使用教程 【免费下载链接】hls-downloader Web Extension for sniffing and downloading HTTP Live streams (HLS) 项目地址: https://gitcode.com/gh_mirrors/hl/hls-downloader 想要轻松保存在线视频、直…

2026/8/12 19:02:40 阅读更多 →
CentOS 7下Hadoop 3.1.4源码编译集成Snappy压缩库实战指南

CentOS 7下Hadoop 3.1.4源码编译集成Snappy压缩库实战指南

1. 项目概述与核心价值最近在给一个数据平台做技术栈升级,涉及到Hadoop 3.1.4的部署。在测试数据压缩性能时,发现原生的Gzip和BZip2虽然稳定,但在处理海量日志和中间数据时,CPU开销和压缩/解压速度成了瓶颈。团队讨论后&#xff0…

2026/8/12 19:02:40 阅读更多 →
企业AI Agent实战:从架构设计到工程落地的深度解析

企业AI Agent实战:从架构设计到工程落地的深度解析

1. 项目概述:一场聚焦“人工智能”实战的行业聚会最近在西安,一场名为“「帝王蟹」企业AI落地实战营”的活动刚刚结束。这个名字听起来有点特别,但如果你关注企业级人工智能应用,尤其是最近火热的AI Agent(智能体&…

2026/8/12 19:02:40 阅读更多 →
实战教程:3分钟快速解密网易云NCM音乐格式,让音乐真正自由

实战教程:3分钟快速解密网易云NCM音乐格式,让音乐真正自由

实战教程:3分钟快速解密网易云NCM音乐格式,让音乐真正自由 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否在网易云音乐下载了心爱的歌曲,却发现只能在特定App中播放?NCM格式的音…

2026/8/12 19:02:40 阅读更多 →
ASP.NET实现高效文件夹上传的技术方案与实践

ASP.NET实现高效文件夹上传的技术方案与实践

1. 文件夹上传功能的技术背景与需求分析 在现代Web应用中,文件夹上传功能正逐渐成为企业级应用的标配需求。传统的文件上传只能处理单个文件,而实际业务场景中(如文档管理系统、云存储服务、医疗影像归档等),用户往往需…

2026/8/12 19:01:40 阅读更多 →

日新闻

Ubuntu 22.04安装与使用tree命令:高效管理Linux目录结构

Ubuntu 22.04安装与使用tree命令:高效管理Linux目录结构

1. 为什么需要一个“目录树”工具?在Linux世界里,尤其是Ubuntu这样的发行版,命令行是很多人的主战场。我们每天都要和文件、目录打交道。ls命令是查看目录内容的首选,它简洁、高效,能列出文件名、权限、大小等关键信息…

2026/8/12 9:33:34 阅读更多 →
博思AI智能体:意图识别、思考链与性能优化的工程实践

博思AI智能体:意图识别、思考链与性能优化的工程实践

在AI应用从“能用”走向“好用”的进程中,系统的响应速度、决策透明度与高并发稳定性是决定用户体验的关键。博思AI智能体近期完成了一次重要的专项优化,聚焦于意图识别、思考链展示与全链路压测三大核心领域,将系统从功能实现推向了工程卓越…

2026/8/12 9:33:34 阅读更多 →
子代理架构:AI智能体任务分解与协同执行的核心原理与实践

子代理架构:AI智能体任务分解与协同执行的核心原理与实践

1. 项目概述:为什么我们需要“子代理”?最近在折腾各种AI应用和自动化流程时,我越来越频繁地遇到一个瓶颈:单个AI智能体(Agent)的能力边界。无论是处理复杂的多步骤任务,还是需要同时调用多个专…

2026/8/12 9:33:34 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/12 1:11:09 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/12 1:11:09 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/12 1:11:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/11 17:09:45 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/12 1:11:10 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/11 17:09:45 阅读更多 →