opencv初学记录

news2024/11/27 2:23:41

准备工作:
1.找一张图片
2.准备python运行环境,并导入库,pip install opencv-python
读取文件,并打印维度

    import cv2  #为什么是cv2不是cv呢,这个2指的是c++的api,是为了兼容老板,cv指的就是c,而不是版本的意思,不要换成cv3
    path = r'./media/1.jpeg'
    print(cv2.getVersionString())
    image = cv2.imread(path)
    print(image.shape)  #输出(720, 1280, 3) 前面代表图片横行和纵列,3表示图片三原色彩色通道

然后把读取到的文件显示到一个窗口

    cv2.imshow("image", image)   #此时如果是加这个窗口会直接闪没
    cv2.waitKey()  #加上这个,按任意键关闭窗口(这个函数会窗体暂停,并等待键盘输入)

图像彩色通道学习
任何颜色都是由RGB按一定比例混合而成的,对openCV来说,存储一张彩色图片,等同于存储三张彩色图片,被存储在opencv的第三个维度上(此图来自b站)
在这里插入图片描述
opencv对颜色的顺序存储是BGR,与常见的RGB相反,当显示器要渲染一张彩色图片,计算机会依次取出图像数据中的三张灰色图,再把它们分别投影到显示器的蓝,绿红的LED芯片上,从而渲染出彩色画面,如下代码将显示下面四个图片

    cv2.imshow("image", image)
    cv2.imshow("blue", image[:, :, 0])
    cv2.imshow("green", image[:, :, 1])
    cv2.imshow("red", image[:, :, 2])

在这里插入图片描述

opencv还提供一种彩色图像的灰度变化算法,可以把三个彩色通道的图像做
平方和加权平均,如下,是BRG三原色的平均,他也描述了,图片的明暗分布,如果在计算机视觉中,通常把这个变换后的图像gray称为灰度图,可以基于灰度图,做不同算法,比如黑片检测图片相似度检测等等
在这里插入图片描述

图像的裁剪

    crop = image[10:170, 40:200]  
    # 将图片裁剪

在这里插入图片描述
绘制功能
OpenCV的图像数据,实际是numpy数组数据结构,所以可以直接使用numpy创建一个黑色画布

    image = numpy.zeros([300, 300, 3], dtype=numpy.uint8)      
    # 灰度的数值类型是无符号八位整数

是一个300*300的黑色画布
在这里插入图片描述
画一条线段

    cv2.line(image, (100, 100), (200, 250), (255,0,255), 2) 
    # 线段起点坐标(100, 100),终点坐标(200, 250),线段颜色(255,0,255),线段粗细为两个像素

在这里插入图片描述
加一个矩形

    cv2.rectangle(image, (30,100), (60, 150), (0,255,33), 2) 
    #矩形框第一个顶点坐标30,100。对角对标60,150。颜色为(0,255,33),粗细是两个像素

在这里插入图片描述
加一个圆

    cv2.circle(image, (150,100), 20, (0,12,155), 3)
    #圆心坐标,圆的半径,颜色,粗细

在这里插入图片描述
绘制字符串

    cv2.putText(image, "Hello OpenCV", (100,50) ,0,1,(11,144,67),1,2)   
     # 文字,坐标,字体需序号(0位默认字体),缩放系数,颜色,粗细,线条类型(1为实线)
     # 附加:putText函数不能使用任意字体

在这里插入图片描述
均值滤波–可以去噪点,但是会破坏图像细节

    # 高斯滤波器,高斯内核为5像素,sigema x设置为0,意思是sigema由内核大小来决定
    gauss = cv2.GaussianBlur(image, (5, 5), 0)
    cv2.imshow("image", image)
    cv2.imshow("gauss", gauss)

如下gauss就比原图噪点要少了
在这里插入图片描述

中值滤波器

    image = cv2.imread(path)
    median = cv2.medianBlur(image, 5)   # 设置内核为5个像素
    cv2.imshow("image", image)
    cv2.imshow("median", median)
    cv2.waitKey()

如下
median
合在一起就是

    image = cv2.imread(path)
    gauss = cv2.GaussianBlur(image, (5, 5), 0)  # 高斯滤波器,高斯内核为5像素,sigema x设置为0,意思是sigema由内核大小来决定
    median = cv2.medianBlur(image, 5)   # 设置内核为5个像素
    cv2.imshow("image", image)
    cv2.imshow("gauss", gauss)
    cv2.imshow("median", median)
    cv2.waitKey()

如下
在这里插入图片描述
图像特征的提取—转角特征

    image = cv2.imread(path)
    gary = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  # 把彩色图像转换为灰度图
    corners = cv2.goodFeaturesToTrack(gary, 500, 0.1, 10)   # 最多返回500个点,点的质量优于0。1,特征点之间的距离大于10个像素
    for corner in corners:      # 遍历,把点标记出来
        x, y = corner.ravel()
        cv2.circle(image, (int(x), int(y)), 3, (255, 0, 255), -1)  
    cv2.imshow("image", image)
    cv2.waitKey()

在这里插入图片描述
opencv的模板匹配学习 — 即,找图片中对应图片

image = cv2.imread(path)
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  # 转换为灰度图片
    template = gray[273:370, 392:492]  #截图这个位置是一个葡萄
    match = cv2.matchTemplate(gray, template, cv2.TM_CCOEFF_NORMED)  # 标准相关匹配算法,把检测图片和被检测图片都标准化,再来计算匹配度,这样保证不受光照的影响
    locations = numpy.where(match >= 0.9)  # 找出匹配系数大于0.9的匹配点  
    w, h = template.shape[0:2]     # 计算模板图案的长和宽 
    for p in zip(*locations[::-1]):    # 遍历每一个匹配点,画出矩形框标记
        x1, y1 = p[0], p[1]
        x2, y2 = x1 + w, y1 + h
        cv2.rectangle(image, (x1,y1),(x2,y2), (0,0,0),2)

    cv2.imshow("image", image)
    cv2.imshow("temp", template)
    cv2.waitKey()

如下所有葡萄都用黑线框起来了, 在这里,如果图案一样,但是比截取的图片小和大的图案都不会被匹配上,也就是对大小敏感,如果想要不同大小的图都匹配到,可以放大缩小图像,匹配多次
在这里插入图片描述

图像梯度算法,特征点提取和匹配都使用了图像梯度, 就是图像的明暗变化,可以分别计算图像沿水平和垂直方向的明暗变化,再取这两个变化的平方和,就得到了梯度,可以类比地理中的梯度

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设计模式(十七):行为型之状态模式

设计模式系列文章 设计模式(一):创建型之单例模式 设计模式(二、三):创建型之工厂方法和抽象工厂模式 设计模式(四):创建型之原型模式 设计模式(五):创建型之建造者模式 设计模式(六):结构型之代理模式 设计模式…

强化学习笔记-12 Eligibility Traces

前篇讨论了TD算法将MC同Bootstrap相结合,拥有很好的特性。本节所介绍的Eligibility Traces,其思想是多个TD(n)所计算预估累积收益按权重进行加权平均,从而得到更好的累积收益预估值。 价值预估模型的参数更新式子可以调整为: 1. O…

Vue CLI $nextTick 过渡与动画

3.12.$nextTick 这是一个生命周期钩子 **this.$nextTick(回调函数)**在下一次DOM更新结束后执行其指定的回调 什么时候用:当改变数据后,要基于更新后的新DOM进行某些操作时,要在nextTick所指定的回调函数中执行 使用 $nextTick 优化 Todo…

【UE 从零开始制作坦克】2-控制坦克移动(简单的移动效果)

效果 步骤 1. 新建蓝图类,父类选择“VehicleWheel(载具车轮)” 这里就命名为“TankWheel” 双击打开“TankWheel”,设置形状半径为40 2. 打开 “BP_West_Tank_M1A1Abrams” 选中“网格体(VehicleMesh)&…

DeepSurvk部署教程

DeepSurvk部署教程 作者:千树、Totoro github项目地址 https://github.com/arturomoncadatorres/deepsurvk Pypi项目地址 https://pypi.org/project/deepsurvk/ 一、DeepSurvk简介 项目作者原话(翻译) DeepSurv 是一种 Cox 比例风险深度神经网络,用于模拟患者协变…

某网站指纹反爬处理

一、问题分析 【疑惑】&#xff1a;使用python的requests库发起get或post请求返回403代码错误&#xff0c;使用postman发起请求发现状态码<200>竟然成功了。这是什么原因&#xff1f;首先排除ip问题&#xff0c;ip有问题的话postman也访问不了。难道是headers出现了问题…

VanillaNet实战:使用VanillaNet实现图像分类

文章目录 摘要安装包安装timm安装 grad-cam 数据增强Cutout和MixupEMA项目结构计算mean和std生成数据集 摘要 论文翻译&#xff1a;https://blog.csdn.net/m0_47867638/article/details/131057152 官方源码&#xff1a;https://github.com/huawei-noah/VanillaNet VanillaNet…

【送书福利-第十二期】机工社Python与AI好书来袭!~

大家好&#xff0c;我是洲洲&#xff0c;欢迎关注&#xff0c;一个爱听周杰伦的程序员。关注公众号【程序员洲洲】即可获得10G学习资料、面试笔记、大厂独家学习体系路线等…还可以加入技术交流群欢迎大家在CSDN后台私信我&#xff01; 本文目录 一、前言二、书籍介绍1、认识AI…

SQL Server 数据加密功能解析

数据加密是数据库被破解、物理介质被盗、备份被窃取的最后一道防线&#xff0c;数据加密&#xff0c;一方面解决数据被窃取安全问题&#xff0c;另一方面有关法律要求强制加密数据。SQL Server的数据加密相较于其他数据库&#xff0c;功能相对完善&#xff0c;加密方法较多。通…

技术背后的温度,夸克App升级智能、普惠、公益高考服务

夸克2023高考信息服务进行了全面升级&#xff0c;通过信息查询、填报工具及专家指导等多维度产品及内容&#xff0c;给考生打造个性化、全周期、全链路的智能信息服务&#xff0c;以提升考生和家长志愿决策的效率。 6月14日&#xff0c;夸克App升级智能选志愿、志愿表等高考信息…

【Java基础学习打卡06】编程语言

目录 引言一、计算机语言是什么&#xff1f;二、计算机语言分类三、计算机语言介绍1.C语言2.C语言3.Java语言4.Python语言 总结 引言 本文主要是理解计算机语言是什么&#xff0c;有哪些分类&#xff0c;分类下有哪些编程语言&#xff0c;以及了解主流的编程语言。 一、计算机…

【源码可分享】教你用Python制作自动答题脚本,实现自动答题,100%正确率!

文章目录 前言一、自动答题的原理二、自动答题的步骤三、Python实现自动答题的方法总结 前言 当今社会&#xff0c;人们的生活越来越依赖于计算机技术&#xff0c;而Python作为一种高级编程语言&#xff0c;已经成为了众多程序员的首选语言。Python具有简单易学、代码简洁、可…

【Java基础学习打卡08】Java语言跨平台原理

目录 引言一、Java程序运行机制二、Java虚拟机三、Java跨平台总结 引言 Java语言编程的一大优势便是跨平台&#xff0c;本文将介绍Java语言是如何实现跨平台的。 一、Java程序运行机制 计算机高级语言按照程序的执行方式可以分为编译型语言和解释型语言。 编译型语言&#x…

一、PyTorch基础

一、PyTorch基本操作 1&#xff0c;导包 import torch2&#xff0c;查看版本号 torch.__version__ """ 2.0.1cpu """3&#xff0c;初始化(全零)矩阵 x torch.empty(3,2) x """ tensor([[7.2868e-44, 8.1275e-44],[6.7262e-4…

教你用Fiddler捕获HTTPS请求

安装Fiddler 这里不特别说明了&#xff0c;网上搜索一大把&#xff0c;根据安装引导一步步安装即可。&#xff08;这里采用的是fiddler v4.6&#xff09; 配置Fiddler 1、打开fiddler配置Tools –>Telerik Fiddler Options。 如果你想学习Fiddler抓包工具&#xff0c;我这…

vue基础--重点

&#xff01;1、vue的特性 &#xff01;2、v-model 双向数据绑定指令 &#xff08;data数据源变化&#xff0c;页面变化&#xff1b; 页面变化&#xff0c;data数据源也变化&#xff09; 1、v-model 会感知到 框中数据变化 2、v-model 只有在表单元素中使用&#xff0c;才能…

CSS体验透视效果

CSS体验透视效果 使用css视距属性perspective结合动画效果实现透视效果。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><me…

金融数字化转型将驶向何处?存储如何保驾护航?

文 | 螳螂观察 作者 | 李永华 “XX行业数字化进入深水区”&#xff0c;经常被谈及。 在金融行业&#xff0c;“深水区”说法却很少出现——这里的数字化始终在“深水区”。 作为数字经济的重要组成部分&#xff0c;金融行业一直走在数字化转型的前沿&#xff0c;总是有新的…

11-执行上下文和执行栈

一、执行上下文 &#x1f35f;&#x1f35f;&#x1f35f;是一种对js代码执行环境的抽象概念 只要有js代码运行&#xff0c;一定是运行在执行上下文中 执行上下文的类型分为三种&#xff1a; 全局执行上下文&#xff1a;只有一个&#xff0c;浏览器中的全局对象就是 window对…

汽车电子Autosar之DTC

目录 一、DTC基本介绍 1、DTC基本组成 2、DTC故障类型 3、DTC与event区别与联系 4、 DTC状态位 5. DTC信息存储 6. DTC信息及状态读取 本文将聚焦于大家都耳熟能详的DTC&#xff08;Diagnostic Trouble Code&#xff09;技术点来聊一聊。 一、DTC基本介绍 DTC顾名思义即…