【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 图片处理:读入图像 2.2 图片处理:显示图像 2.3 图片处理:图像保存 3、图像处理入门基础 3.1 图像成像原理介绍 3.2 图像分类 3.2.1 二值图像 3.2.2灰度图像 3.2.3彩色图像…...

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

小型洗衣机什么牌子好又便宜?性价比迷你洗衣机推荐
由于日常所穿的内衣裤由于各种原因,时间一久就很容易产生细菌,而且和其他大件的衣物一起混洗,很容易造成细菌的交叉感染,积攒起来洗就更不卫生了,留在内衣裤上的分泌物会继续滋生细菌,比如闷热的环境下念珠…...

INFINI Easysearch 与华为鲲鹏完成产品兼容互认证
何为华为鲲鹏认证 华为鲲鹏认证是华为云围绕鲲鹏云服务(含公有云、私有云、混合云、桌面云)推出的一项合作伙伴计划,旨在为构建持续发展、合作共赢的鲲鹏生态圈,通过整合华为的技术、品牌资源,与合作伙伴共享商机和利…...

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

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

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

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

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

JavaScript中的for循环你用对了吗?
🌈个人主页:前端青山 🔥系列专栏:JavaScript篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:JavaScript-for循环 目录 循环结构 循环思想(三要素) 实现…...

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

2023年小美赛认证杯国际赛A题解题思路+数据分享版+部分代码
小美赛作为一个与美赛高度相似的比赛,通常作为很多队伍的美赛练手赛,本次也将尝试帮助大家对A题进行求解,希望能够对大家有所帮助。真实的选题人数评估预计明天进行公布 难度 B>DC>A 选题 A>B>D>C 问题A(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日,在第六届中国国际进口博览会(简称“进博会”)上,中粮集团与来自全球的供应商签约进口农产品,金额超百亿美元,签约额、进口量、进口来源地覆盖范围均创历史新高。 这只是中粮集团落实集中采购&…...

SpringBoot学习笔记-实现微服务:匹配系统(中)
笔记内容转载自 AcWing 的 SpringBoot 框架课讲义,课程链接: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)
点我完整下载:《RSA实现中弱密钥漏洞分析》本科毕业论文一万字.doc RSA实现中弱密钥漏洞分析 "Analyzing Weak Key Vulnerabilities in RSA Implementation" 目录 目录 2 摘要 3 关键词 4 第一章 引言 4 1.1 研究背景 4 1.2 研究目的 5 1.3 研究意义 6 第…...

【管理运筹学】背诵手册(六)| 图与网络分析(最大流问题,最小费用最大流问题)
六、图与网络分析 最大流问题 最大流问题的数学规划模型为: 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是一个基于像素的渲染引擎,它使用JavaScript API在画布上绘制图像。以下是它的一些优点和缺点: 优点: Canvas的渲染速度快,适合处理大量图像和高度动态的图像。 可以直接操作像素,从而能够创建出高质量、流畅的…...

浏览器的渲染原理
以下内容来源于渡一前端大师课,仅作个人学习记录。 渲染的第一步是 解析HTML 解析过程中遇到CSS解析CSS,遇到JS执行JS。为了提高解析效率,浏览器在开始解析之前,会启动一个预解析的线程,率先下载HTML中的外部CSS文件和…...

从 JSON 转 Java 实体的多种方法详解
将 JSON 数据转换为 Java 对象是现代应用程序开发中常见的任务。在 Java 中,有多种方法可以实现这一目标。本文将详细介绍几种常见的方法,以及它们的优缺点。 1. 手动映射(Manual Mapping) 手动映射是最基础的方法之一ÿ…...

数据库的多表查询(MYSQL)表表联立
根据以上三张表格,对三张表格进行不同的联立,查询并显示符合条件的内容。 1. 查出至少有一个员工的部门。显示部门编号、部门名称、部门位置、部门人数。 mysql> SELECT d.deptno AS 部门编号, d.dname as 部门名称, d.loc as 部门位置, COUNT(e.emp…...

P8650 [蓝桥杯 2017 省 A] 正则问题(dfs )
多重括号,利用回溯来对上一层括号中的内容进行反馈 实现: 若为 x 长度加一 若为 ( 进入递归计算 (计算相当于子表达式) 若为 ) 结束当前递归 若为 | …...

【ESP32】手势识别实现笔记:红外温度阵列 | 双三次插值 | 神经网络 | TensorFlow | ESP-DL
目录 一、开发环境搭建与新建工程模板1.1、开发环境搭建与卸载1.2、新建工程目录1.3、自定义组件 二、驱动移植与应用开发2.1、I2C驱动移植与AMG8833应用开发2.2、SPI驱动移植与LCD应用开发2.3、绘制温度云图2.4、启用PSRAM(可选)2.5、画面动静和距离检测…...

No matching version found for @babel/compat-data@^7.23.5 处理
npm ERR! notarget No matching version found for babel/compat-data^7.23.5 处理 报错信息 npm WARN ERESOLVE overriding peer dependency npm ERR! code ETARGET npm ERR! notarget No matching version found for babel/compat-data^7.23.5. npm ERR! notarget In most …...

手持机|三防智能手机_4寸/5寸/6寸安卓系统三防手机PDA手持终端方案
随着科技的不断发展,三防手持机作为一种多功能设备,正逐渐在各行业得到广泛应用。这款手持机采用高性能处理器,支持高精度北斗定位和工业本安防爆功能,并具备IP67级防水防尘性能和1.5米防跌落能力。因此,它在仓储管理、…...

蓝桥杯算法心得——仙界诅咒(dfs)
大家好,我是晴天学长,搜索型的dfs,差点开二维矩阵了,仔细一想,没那么夸张啊,哈哈哈,需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪 1…...

List集合,遍历,数据结构
一.List常见的方法: 二. List集合的遍历方式 除了 迭代器遍历 增强for遍历 Lambda表达式遍历,还有自己独有的普通for遍历,列表迭代器遍历 1.迭代器遍历 2.增强for遍历 3.Lambda表达式遍历 4.普通for遍历 5.列表迭代器遍历 列表迭代器相对于…...

2的幂运算
2的幂 描述 : 给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。 如果存在一个整数 x 使得 n 2x ,则认为 n 是 2 的幂次方。 题目 : LeetCode 231.2的幂 : 231. 2 的幂 分…...