当前位置: 首页 > news >正文

【opencv】计算机视觉基础知识

目录

前言

1、什么是计算机视觉

2、图片处理基础操作

2.1 图片处理:读入图像

2.2 图片处理:显示图像

2.3 图片处理:图像保存

3、图像处理入门基础

3.1 图像成像原理介绍

3.2 图像分类

3.2.1 二值图像

3.2.2灰度图像

3.2.3彩色图像(RGB)

4、像素处理操作

4.1 读取像素

4.2 修改像素

4.3 使用python中的numpy修改像素点

4.3.1 读取像素

4.3.2 修改像素

5、获取图像属性

5.1 形状

5.2 像素数目

5.3 图像类型

6、图像ROI

7、通道的拆分与合并

7.2 合并


前言

本文将非常细致的讲解相关与计算机视觉OpenCV的相关知识即操作,非常的简单易懂。本文主要讲解相关与计算机视觉的相关入门内容,关于图像处理的相关简单操作,包括读入图像、显示图像及图像相关理论知识。

推荐

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站

1、什么是计算机视觉

  • 计算机视觉是一门研究如何使机器“看”的科学,更进一步的说,就是是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,使电脑处理成为更适合人眼观察或传送给仪器检测的图像。作为一个科学学科,计算机视觉研究相关的理论和技术,试图建立能够从图像或者多维数据中获取‘信息’的人工智能系统。这里所指的信息指Shannon定义的,可以用来帮助做一个“决定”的信息。因为感知可以看作是从感官信号中提取信息,所以计算机视觉也可以看作是研究如何使人工系统从图像或多维数据中“感知”的科学。
  • 视觉是各个应用领域,如制造业、检验、文档分析、医疗诊断,和军事等领域中各种智能/自主系统中不可分割的一部分。由于它的重要性,一些先进国家,例如美国把对计算机视觉的研究列为对经济和科学有广泛影响的科学和工程中的重大基本问题,即所谓的重大挑战(grand challenge)。计算机视觉的挑战是要为计算机和机器人开发具有与人类水平相当的视觉能力。机器视觉需要图象信号,纹理和颜色建模,几何处理和推理,以及物体建模。一个有能力的视觉系统应该把所有这些处理都紧密地集成在一起。

我们目前如果是在校学生,对于计算机视觉机器学习的相关知识的学习是非常有用的,无论是对于自己的工作前景还是相关论文的撰写都是非常有用的,而且目前对于计算机的相关知识已经设计到了各个专业领域,其中包括医学领域(计算机视觉分析CT成像)、电学领域(使用matlab及相关领域画图)、人脸识别和车牌识别等等。而且有想要做交叉学科的对于计算机可以和任意领域及进行无障碍交叉。
由于我这个理工男的语文功底并不好,语言组织能力不强,所以我们今天就啰嗦到这里,总结一下就是计算机视觉及机器学习等和计算机相关的东西特别重要!

2、图片处理基础操作

首先我们来看一段简单的计算机视觉相关代码:

import cv2
img=cv2.imread('path')#path指图片相关路径
cv2.imshow('Demo',img)
cv2.nameWindow('Demo')
cv2.waitKey(0)
cv2.destroyAllWindows()

这段代码就可以在计算机中显示出img的相关图像。接下来我们讲解一下每一步的相关操作。

2.1 图片处理:读入图像

相关函数:image=cv2.imread(文件名相关路径[显示控制参数])
文件名:完整的路径。
其中参数包括:
cv.IMREAD_UNCHANGED :表示和原图像一致
cv.IMREAD_GRAYSCALE : 表示将原图像转化为灰色图像。
cv.IMREAD_COLOR:表示将原图像转化为彩色图像。
例如:
cv2.imread(‘d:\image.jpg’,cv.IMREAD_UNCHANGED)

2.2 图片处理:显示图像

相关函数:None=cv2.imshow(窗口名,图像名)
例如:cv2.imshow(“demo”,image)
但是在OpenCV中我们图像显示还是要加上相关约束:
retval=cv2.waitKey([delay])
如果没有这个限制,那么显示的图像就会一闪而过,就会发生错误。
其中delay参数包括:
dealy=0,无限等待图像显示,直到关闭。也是waitKey的默认数值。
delay<0,等待键盘点击结束图像显示,也就是说当我们敲击键盘的时候,图像结束显示。
delay>0,等待delay毫秒后结束图像显示。
最后我们还需要显示
cv2.destroyAllWindows()
把图像从内存中彻底删除。

2.3 图片处理:图像保存

相关函数:retval=cv2.imwrite(文件地址,文件名)
例如:
cv2.imwrite(‘D:\test.jpg’,img)
将img保存到了路径D:\test.jpg

3、图像处理入门基础


3.1 图像成像原理介绍

首先我们第一个要深深深深的刻在脑子里的概念就是:

生动一点表示就是这样:

这样就可以完美的展示出计算机图像的成像原理,就是用一个个有颜色的像素点拼接而成的。

3.2 图像分类
3.2.1 二值图像

二值图像表示的意思就是每一个像素点只由0和1构成,0表示黑色,1表示白色,而且这里的黑色和白色是纯黑和纯白。所以我们看到的图像也就是这个样子。我们以官网丽娜为例子。
 

3.2.2灰度图像

灰度图像就是一个8位的位图。什么意思呢?就是说00000001一直到11111111,这就是二进制表示。如果表示成我们常用的十进制就是0-255。其中0就表示纯黑色,255就表示纯白色,中间就是处于纯黑色到纯白色的相关颜色。我们还是以丽娜为例。

3.2.3彩色图像(RGB)

计算机中所有的颜色都可以由R(红色通道)、G(绿色通道)、B(蓝色通道)来组成,其中每一个通道都有0-255个像素颜色组成。比如说R=234,G=252,B=4就表示黄色。显示出来的也是黄色。所以说彩色图像由三个面构成,分别对应R,G,B。我们还是以丽娜为例子:

所以说我们就可以知道复杂程度排序的话就是:彩色图像-灰度图像-二值图像。所以我们在进行人脸项目或者是车牌识别项目中最最最常用的操作就是将彩色图像转化为灰度图像,然后将灰度图像转为最简单的二值图像。

4、像素处理操作

4.1 读取像素

相关函数:返回值=图像(位置参数) 我们先以灰度图像,返回灰度值:
p=img[88,142]
print§
这里我们就可以返回图片坐标[88,142]处的灰度值。
然后我们以彩色图像为例子:
我们知道彩色图像由BGR三个通道的值构成。那么我们需要返回三个数值:
blue=img[78,125,0]
green=img[78,125,1]
red=img[78,125,2]
print(blue,green,red)
这样我们就返回了这三个数值。

4.2 修改像素

直接暴力修改。
对于灰度图像, img[88,99]=255
对于彩色图像,
img[88,99,0]=255
img][88,99,1]=255
img[88,99,2]=255这里也可以写成
img[88,99]=[255,255,255]等同于上方。
改动多个像素点
例如还是以彩色图像为例子:
i[100:150,100:150]=[255,255,255]
意思也就是将图像横坐标100到150和纵坐标100到150的这个区间全部用白色替代。

4.3 使用python中的numpy修改像素点
4.3.1 读取像素

相关函数:返回值=图像.item(位置参数)
我们以灰度图像为例:
o=img,item(88,142)
print(o)
对于彩色图像我们还是:
blue=img.item(88,142,0)
green=img.item(88,142,1)
red=img.item(88,142,2)
然后print(blue,green,red)

4.3.2 修改像素

图像名.itemset(位置,新的数值)
我们以灰度图像为例子:
img.itemset((88,99),255)
对于BGR图像:
img.itemset((88,99,0),255)
img.itemset((88,99,1),255)
img.itemset((88,99,2),255)

import cv2
import numpy as np 
i=cv2.imread('path',cv2.IMREAD_UNCHANGED)
print(i.item(100,100))
i.itemset((100,100),255)
print(i,item(100,100))

通过这段代码我们就可以看得出来像素的更改。
对于彩色图像也是一样。

5、获取图像属性

5.1 形状

shape可以获取图像的形状,返回值包含行数、列数通道数的元组。
灰度图像返回行数列数
彩色图像返回行数、列数、通道数。

import cv2
img1=cv2.imread('灰度图像')
print(img1.shape)
5.2 像素数目

size可以获取图像的像素数目。
灰度图像:行数列数
彩色图像:行数
列数*通道数

5.3 图像类型

dtype返回的是图像的数据类型

import cv2
img=cv2.imread('图像名称')
print(img.dtype)

6、图像ROI

ROI(region of interest)表示感兴趣区域

  • 从被处理的图像中以方框、圆、椭圆或者不规则多边形等方式勾勒出需要处理的区域。
  • 可以通过各种算子(operator)和函数来求ROI,并进行下一步操作。
import cv2
import numpy as np
a=cv2.imread('path')
b=np.ones((101,101,3))
b=a[220:400,250:350]
a[0:101,0:101]=b
cv2.imshow('o',a)
cv2.waitKey()
cv2.destroyAllWindows()

我们还可以将感兴趣的图像加入到别的图像当中。

7、通道的拆分与合并

7.1 拆分

import cv2
img=cv2.imread('图像名')
b = img[ : , : , 0 ]
g = img[ : , : , 1 ]
r = img[ : , : , 2 ]

我们在OpenCV中有专门拆分通道的函数:
cv2.split(img)

import cv2
import numpy as np
a=cv2.imread("image\lenacolor.png")
b,g,r=cv2.split(a)
cv2.imshow("B",b)
cv2.imshow("G",g)
cv2.imshow("R",r)
cv2.waitKey()
cv2.destroyAllWindows()

7.2 合并
import cv2
import numpy as np
a=cv2.imread("image\lenacolor.png")
b,g,r=cv2.split(a)
m=cv2.merge([b,g,r])
cv2.imshow("merge",m)
cv2.waitKey()
cv2.destroyAllWindows()

我们将上方的拆分图像进行merge合并就可以得到以下结果:

如果觉得博主的文章还不错或者您用得到的话,可以免费的关注一下博主,如果三连收藏支持就更好啦!这就是给予我最大的支持!

相关文章:

【opencv】计算机视觉基础知识

目录 前言 1、什么是计算机视觉 2、图片处理基础操作 2.1 图片处理&#xff1a;读入图像 2.2 图片处理&#xff1a;显示图像 2.3 图片处理&#xff1a;图像保存 3、图像处理入门基础 3.1 图像成像原理介绍 3.2 图像分类 3.2.1 二值图像 3.2.2灰度图像 3.2.3彩色图像…...

Node——Node.js简介

Node.js是一个基于Chrome V8引擎的JavaScript运行时环境&#xff0c;它能够让JavaScript脚本运行在服务端&#xff0c;这使得JavaScript成为与PHP、Python等服务端语言平起平坐的脚本语言。 1、认识Node.js Node.js是当今网站开发中非常流行的一种技术&#xff0c;它以简单易…...

小型洗衣机什么牌子好又便宜?性价比迷你洗衣机推荐

由于日常所穿的内衣裤由于各种原因&#xff0c;时间一久就很容易产生细菌&#xff0c;而且和其他大件的衣物一起混洗&#xff0c;很容易造成细菌的交叉感染&#xff0c;积攒起来洗就更不卫生了&#xff0c;留在内衣裤上的分泌物会继续滋生细菌&#xff0c;比如闷热的环境下念珠…...

INFINI Easysearch 与华为鲲鹏完成产品兼容互认证

何为华为鲲鹏认证 华为鲲鹏认证是华为云围绕鲲鹏云服务&#xff08;含公有云、私有云、混合云、桌面云&#xff09;推出的一项合作伙伴计划&#xff0c;旨在为构建持续发展、合作共赢的鲲鹏生态圈&#xff0c;通过整合华为的技术、品牌资源&#xff0c;与合作伙伴共享商机和利…...

将linux服务器 设置成 proxy.SOCKS5 服务器

gpt: 如果你想在 Linux 服务器上设置一个 SOCKS5 代理服务器&#xff0c;你可以使用一些现有的工具&#xff0c;比如 Shadowsocks、Dante、或者其他支持 SOCKS5 协议的软件。下面是一个使用 Dante 的简单示例&#xff1a; 1. **安装 Dante&#xff1a;** bash sudo apt-g…...

无mac电脑生成uniapp云打包私钥证书的攻略

uniapp顾名思义是一个跨平台的开发工具&#xff0c;大部分uniapp的开发者&#xff0c;其实并没有mac电脑来开发&#xff0c;但是生成ios的证书&#xff0c;官网的教程却是需要mac电脑的&#xff0c;那么有没有办法无需mac电脑即可生成uniapp云打包的私钥证书呢&#xff1f; 下…...

py 启动默认浏览器

要在Python中启动默认浏览器&#xff0c;可以使用第三方库如webbrowser或pyperclip&#xff0c;也可以使用操作系统特定的命令行调用。以下是几个不同的方法&#xff1a; 使用webbrowser库&#xff1a; import webbrowser webbrowser.open("http://example.com")这…...

scala可变参数列表使用

在Scala中&#xff0c;可以使用可变参数列表&#xff08;varargs&#xff09;来定义一个函数&#xff0c;以接受可变数量的参数。示例如下&#xff1a; def printArgs(args: String*): Unit {args.foreach(println) }// 使用可变参数列表 printArgs("Hello", "…...

经验分享:JMeter控制RPS

一、前言 ​ RPS (Request Per Second)一般用来衡量服务端的吞吐量&#xff0c;相比于并发模式&#xff0c;更适合用来摸底服务端的性能。我们可以通过使用 JMeter 的常数吞吐量定时器来限制每个线程的RPS。对于RPS&#xff0c;我们可以把他理解为我们的TPS&#xff0c;我们就…...

JavaScript中的for循环你用对了吗?

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;JavaScript篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:JavaScript-for循环 目录 循环结构 循环思想&#xff08;三要素&#xff09; 实现…...

WordPress(10)解决中文连接问题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、修改的前后二、自定义结构讲明三、修改方法前言 提示:这里可以添加本文要记录的大概内容: 1.中文连接如:http://www.lplovemm.love/2023/11/12/测试 2.这种连接在提交sitemap收录的时…...

2023年小美赛认证杯国际赛A题解题思路+数据分享版+部分代码

小美赛作为一个与美赛高度相似的比赛&#xff0c;通常作为很多队伍的美赛练手赛&#xff0c;本次也将尝试帮助大家对A题进行求解&#xff0c;希望能够对大家有所帮助。真实的选题人数评估预计明天进行公布 难度 B>DC>A 选题 A>B>D>C 问题A&#xff08;MCM&am…...

删除list中除最后一个之外所有的数据

1.你可以新建一个list List<Integer> listnew ArrayList<>();int i0;while (i<100){list.add(i);}List<Integer> subList list.subList(list.size()-1, list.size());System.out.println("原list大小--"list.size());System.out.println("…...

北京筑龙助力中粮集团采购供应链改革加速跑

11月6日&#xff0c;在第六届中国国际进口博览会&#xff08;简称“进博会”&#xff09;上&#xff0c;中粮集团与来自全球的供应商签约进口农产品&#xff0c;金额超百亿美元&#xff0c;签约额、进口量、进口来源地覆盖范围均创历史新高。 这只是中粮集团落实集中采购&…...

SpringBoot学习笔记-实现微服务:匹配系统(中)

笔记内容转载自 AcWing 的 SpringBoot 框架课讲义&#xff0c;课程链接&#xff1a;AcWing SpringBoot 框架课。 CONTENTS 1. 同步玩家位置1.1 游戏信息的记录1.2 实现多线程同步移动 2. 同步碰撞检测3. 实现游戏结束界面4. 持久化游戏状态4.1 创建数据库表4.2 保存游戏对局信息…...

【复杂网络建模】——基于代理的社会网络建模(Agent-Based Modeling,ABM)[Python实现]

目录 一、复杂网络建模方法 二、基于代理的社会网络建模实现及Python实现代码 一、复杂网络建模方法 复杂网络是一种由大量相互连接的元素(节点或顶点)组成的网络结构,这些连接通常是非常复杂和动态的。这些网络可以在各种领域中发现,包括社交网络、生物学系统、信息技术…...

RSA实现中弱密钥漏洞分析(Analyzing Weak Key Vulnerabilities in RSA Implementation)

点我完整下载&#xff1a;《RSA实现中弱密钥漏洞分析》本科毕业论文一万字.doc RSA实现中弱密钥漏洞分析 "Analyzing Weak Key Vulnerabilities in RSA Implementation" 目录 目录 2 摘要 3 关键词 4 第一章 引言 4 1.1 研究背景 4 1.2 研究目的 5 1.3 研究意义 6 第…...

【管理运筹学】背诵手册(六)| 图与网络分析(最大流问题,最小费用最大流问题)

六、图与网络分析 最大流问题 最大流问题的数学规划模型为&#xff1a; max ⁡ v f 12 f 13 { f 12 f 13 − f 57 − f 67 0 f 13 f 23 f 34 f 35 . . . 0 ≤ f i j ≤ c i j \max vf_{12}f_{13}\\ \begin{cases} f_{12}f_{13}-f_{57}-f_{67}0 \\ f_{13}f_{23}f_{34}f…...

C语言之结构体详解

C语言之结构体详解 文章目录 C语言之结构体详解1. 结构体类型的声明2. 结构体变量的创建和初始化3. 结构体的特殊声明4. 结构体的自引用结构体的自引用匿名结构体的自引用 5. 结构体内存对齐5.1 练习一5.2 练习三 6. 为什么存在内存对⻬? 1. 结构体类型的声明 struct tag {me…...

学习canvas

Canvas是一个基于像素的渲染引擎&#xff0c;它使用JavaScript API在画布上绘制图像。以下是它的一些优点和缺点&#xff1a; 优点&#xff1a; Canvas的渲染速度快&#xff0c;适合处理大量图像和高度动态的图像。 可以直接操作像素&#xff0c;从而能够创建出高质量、流畅的…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...