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

news2025/1/12 18:55:47

目录

前言

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合并就可以得到以下结果:

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

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

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

相关文章

A++ 敏捷开发-1 如何改善

1 如何改善 敏捷开发过程改进案例 5月 A公司一直专门为某电信公司提供针对客服、线上播放等服务服务。 张工是公司的中层管理者&#xff0c;管理好几个开发团队&#xff0c;有5位项目经理向他汇报。 他听说老同学的团队都开始用敏捷开发&#xff0c;很感兴趣&#xff0c;便参…

【Linux】I/O多路转接技术

I/O多路转接技术 一、I/O多路转接之select1、select函数2、fd_set的相关内容3、如何在代码中高效的使用select函数4、select服务器5、select的优缺点6、select的适用场景 二、I/O多路转接之poll1、poll函数2、struct pollfd结构2、poll服务器3、poll的优缺点 三、I/O多路转接之…

一个简单的参数帮助框架,c实现

文章目录 具体实现如下&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h> void print_help(char *argv[]) { printf("Usage: %s [options]\n", argv[0]); printf("Options:\n"); printf(" -h, -…

使用SLS日志服务采集Kong网关的日志

一、阿里云SLS 官方的接入文档已比较丰富了&#xff0c;本文不意重复说明此事。 站在使用的角度&#xff0c;以采集Kong的日志为示例&#xff0c;说明我们应该如何治理日志。 说白了&#xff0c;本文是想给你怎么省钱作一个建议&#xff0c;希望不会让你公司也“降本增笑”。…

1-cuda与gpu编程

文章目录 CUDA与GPU编程1. 并行处理与GPU体系架构1.1 并行处理简介1.1.1 串行处理与并行处理的区别1.1.2 并行处理的概念1.1.3 常见的并行处理 1.2 GPU并行处 理1.2.1 GPU与CPU并行处理的异同1.2.2 CPU的优化方式1.2.3 GPU的特点 1.3 环境搭建1.4 环境变量配置 参考环境搭建设置…

用HeidiSQL在MySQL中创建新的数据库

用有权限的用户登录&#xff1a; 右键单击&#xff0c;选择&#xff1a; 输入要创建的数据库名称&#xff0c;然后点击“确定”&#xff1a; 刷新下&#xff0c;就看到新创建的数据库了&#xff1a; 在新创建的数据库中&#xff0c;就可以做其它操作了&#xff0c;例如…

三、使用CRT连接三台虚拟机

目录 1、建立连接 2、参数配置 3、设置主题,颜色和仿真 1、建立连接

厉害了!!FastReport 全系.NET控件升级v2024,已覆盖支持全新.NET 8 框架 ~

FastReport 作为一款国际知名的报表开发控件&#xff0c;其跨平台的多语言脚本引擎FastScript&#xff0c;桌面OLAP FastCube&#xff0c;被世界各地的开发者所认可。 此次FastReport旗下.NET全系更新至v2024新版&#xff0c;在此版本中&#xff0c;上线了许多开发者关注的功能…

SpringSecurity的默认登录页的使用

SpringSecurity的默认登录页的使用 01 前期准备 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--mysql驱动--><dependency><grou…

鸿蒙(HarmonyOS)HelloWo入门

1.HarmonyOS简单介绍 1. HarmonyOS特征&#xff1a;一开发发&#xff0c;多端部署&#xff0c;可分可合&#xff0c;自由流转2. HarmonyOS使用的语言&#xff1a;是ArkTs,ArkTs是在TypeScript(简称TS)基础上扩展的&#xff0c;而TS又是在JavaScript(简称JS)的超集、UI框架ArkUI…

看Spring源码不得不会的@Enable模块驱动实现原理讲解

这篇文章我想和你聊一聊 spring的Enable模块驱动的实现原理。 在我们平时使用spring的过程中&#xff0c;如果想要加个定时任务的功能&#xff0c;那么就需要加注解EnableScheduling&#xff0c;如果想使用异步的功能&#xff0c;那就要加EnableScheduling注解&#xff0c;其实…

windows系统可以正常打开蓝牙,但是不能扫描到可连接的设备,蓝牙异常

项目场景&#xff1a; windows系统可以正常打开蓝牙&#xff0c;但是不能扫描到可连接的设备 问题描述 windows系统可以正常打开蓝牙&#xff0c;但是不能扫描到可连接的设备&#xff0c;在尝试卸载重装蓝牙驱动后依然不可以使用 原因分析&#xff1a; 驱动程序问题&#xf…

【23真题】耗时一周还原,终于有真题啦!

今天分享的是23年上海电力850的信号与系统回忆版试题及解析。上电的真题资源极其稀少&#xff0c;去年我找了3份&#xff0c;全部为假&#xff01;好在今年有刚刚上岸的同学全力协助&#xff0c;为大家弄出一份回忆版真题&#xff0c;希望对大家有帮助&#xff01; 小马哥Tips…

Springboot+vue的疗养院管理系统(有报告),Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的疗养院管理系统&#xff08;有报告&#xff09;&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的疗养院管理系统&#xff0c;采用M&#xff08;mod…

class dump使用方式和原理

一、安装 官网下载安装包完成后&#xff0c;将class-dump复制到usr/bin文件夹下 如果这个时候没有发现usr文件夹 说明其隐藏起来了 去查询mac系统下怎么显示隐藏文件 发现mac os 10.11不让复制 没有这个权限 解决办法如下&#xff1a; 重启电脑&#xff0c;按住 command …

机器人仿真系统调研

仿真是机器人学习和研究过程中最重要的工具之一&#xff0c;是指通过计算机对实际的物理系统进行模拟的技术。机器人仿真基于交互式计算机图形技术和机器人学理论&#xff0c;生成机器人的几何图形&#xff0c;并对其进行三维显示&#xff0c;用来描述机器人及工作环境的动态变…

FineReport帆软报表的表格动态列的实现

关于帆软 帆软报表&#xff08;FineReport&#xff09;是一款企业级的数据报表工具&#xff0c;旨在帮助用户快速创建、设计和生成各种类型的报表。它提供了丰富的报表设计功能和灵活的数据展示方式&#xff0c;适用于各种行业和业务需求 以下是帆软报表的一些主要特点和功能…

【赠书第10期】从概念到现实:ChatGPT和Midjourney的设计之旅

文章目录 前言 1 ChatGPT的崛起 2 Midjourney的探索 3 技术创新的交汇 4 对未来的影响 5 结论 6 推荐图书 7 粉丝福利 前言 在过去的几年里&#xff0c;自然语言处理和聊天模型的领域取得了飞速的发展。ChatGPT 作为一个由OpenAI 开发的大型语言模型&#xff0c;以其强…

C++解析xml示例

C解析xml示例 1. Xml文档介绍1.1 特点及作用1.2 Xml优点1.2.1 良好的可拓展性1.2.2 内容与形式分离 1.3 Xml组成1.3.1 Xml声明1.3.2 根元素1.3.3 元素1.3.4 属性1.3.5 实体1.3.6 注释 2 C解析Xml2.1 tinyXml2类库2.2 关键接口2.2.1 LoadFile2.2.2 RootElement2.2.3 FirstChildE…

重要通知丨JumpServer开源堡垒机V2社区版即将停止维护的通知

尊敬的JumpServer开源堡垒机用户&#xff1a;您好&#xff01; 如《关于JumpServer开源堡垒机V2版本产品生命周期的相关说明》所示&#xff0c;JumpServer开源堡垒机V2版本&#xff08;社区版&#xff09;将于2023年12月31日停止维护支持。 在过去两年多的时间里&#xff0c;…