机器视觉与OpenCV--01篇

计算机眼中的图像

像素

像素是图像的基本单位,每个像素存储着图像的颜色、亮度或者其他特征,一张图片就是由若干个像素组成的。

RGB

在计算机中,RGB三种颜色被称为RGB三通道,且每个通道的取值都是0到255之间。

计算机中图像的存储

我们要先弄清楚图像如何在计算机中存储,才能去很好的操作它们。在计算机中,图像的存储都是以【数组】的形式存在的。

一个RGB图像,其实就是一个三维数组,第一维度存【高度】,第二维度存【宽度】,第三维度存【颜色通道】。

注意一点:OpenCV中颜色存储不是RGB,而是BGR。

下面通过示例来解析三原色

对下面的 image 图像进行单元色分离,得出image_red、image_green和image_blue。

 方法一:

import numpy as np
import matplotlib.pyplot as plt#创建三维全 0 数组
img = np.zeros((700,700,3),dtype=np.uint8)for i in range(0,700,100):for j in range(0,700,100):img[i,:,:] = (255,255,255)img[:,j,:] = (255,255,255 )if i!=0 and j!=0 and i!=600 and j!=600 and (i==j or i+j==600):img[i:i+100,j:j+100,:] = (255,0,0)#创建三通道图
img_red = np.zeros((700,700,3),dtype=np.uint8)
img_green = np.zeros((700,700,3),dtype=np.uint8)
img_blue = np.zeros((700,700,3),dtype=np.uint8)#分离原图三原色
R = img[:,:,0]
G = img[:,:,1]
B = img[:,:,2]#三原色赋值三通道
img_blue[:,:,0] = B
img_green[:,:,1] = G
img_red[:,:,2] = Rplt.subplot(232)
plt.imshow(img)
plt.subplot(234)
plt.imshow(img_red)
plt.subplot(235)
plt.imshow(img_green)
plt.subplot(236)
plt.imshow(img_blue)plt.show()

  方法二:

import cv2
import numpy as np# cv2.imshow()        #显示由cv2.imread()读取的图像
# cv2.rectangle()     #绘制矩形
# cv2.waitKey()       #用于用户等待时间,设置为0,表示无限等待
# cv2.split()         #用于分隔图像img = np.zeros((700,700,3),dtype=np.uint8)for i in range(0,700,100):for j in range(0,700,100):top_left = (j,i)bottom_right = (j+100-1,i+100-1)if i!=0 and j!=0 and i!=600 and j!=600 and (i==j or i+j==600):cv2.rectangle(img,top_left,bottom_right,(0,0,255),-1)else:cv2.rectangle(img,top_left,bottom_right,(255,255,255),2)#创建三通道图
img_red = np.zeros((700,700,3),dtype=np.uint8)
img_green = np.zeros((700,700,3),dtype=np.uint8)
img_blue = np.zeros((700,700,3),dtype=np.uint8)#分离原图三原色
B,G,R= cv2.split(img)#三原色赋值三通道
img_blue[:,:,0] = B
img_green[:,:,1] = G
img_red[:,:,2] = Rcv2.imshow('image',img)
cv2.imshow('image_blue',img_blue)
cv2.imshow('image_green',img_green)
cv2.imshow('image_red',img_red)
cv2.waitKey(0)

OpenCV介绍

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它包含了众多关于图像处理和计算机视觉的通用算法,这些算法可以用于解决各种实际问题,比如人脸识别、物体检测、图像分割、视频分析等。OpenCV 提供了 C++、Python、Java 和 MATLAB 等多种语言的接口,其中 Python 接口由于其简洁性和易用性而特别受欢迎。

以下是 OpenCV Python 的一些关键特性和用途:

关键特性

  1. ‌丰富的功能‌:OpenCV 提供了大量的图像处理函数,包括滤波、边缘检测、形态学操作、图像变换、特征检测与匹配、相机标定与三维重建等。
  2. ‌高性能‌:OpenCV 是用 C++ 编写的,并进行了高度优化,因此在处理大规模图像数据时具有很高的性能。Python 接口通过调用底层的 C++ 实现来保持高效性。
  3. ‌跨平台‌:OpenCV 可以在多种操作系统上运行,包括 Windows、Linux、macOS 和 Android 等。
  4. ‌易于使用‌:OpenCV 的 Python 接口设计直观,易于学习和使用。同时,OpenCV 还提供了详细的文档和丰富的教程资源。
  5. ‌社区支持‌:OpenCV 拥有一个活跃的社区,用户可以在论坛、GitHub 和 Stack Overflow 等平台上寻求帮助和分享经验。

用途

  1. ‌图像处理‌:OpenCV 可以用于图像的滤波、去噪、增强、变换等操作,以改善图像的质量或提取有用的信息。
  2. ‌物体检测与识别‌:利用 OpenCV 提供的特征检测器(如 SIFT、SURF、ORB 等)和机器学习算法(如 SVM、随机森林等),可以实现物体的检测和识别。
  3. ‌视频分析‌:OpenCV 支持视频捕捉、处理和分析,可以用于视频跟踪、运动检测、背景减除等任务。
  4. ‌人脸识别‌:OpenCV 提供了多种人脸识别算法,如 Eigenfaces、Fisherfaces、LBPH(Local Binary Patterns Histograms)等,可以用于人脸检测、识别和验证。
  5. ‌三维重建‌:通过相机标定和立体视觉技术,OpenCV 可以实现三维场景的重建和测量。
  6. ‌增强现实(AR)‌:OpenCV 可以与计算机图形学库结合使用,实现增强现实应用,如在真实场景中叠加虚拟对象。

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

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

相关文章

qemu源码解析【03】qom实例

目录 qemu源码解析【03】qom实例arm_sbcon_i2c实例 qemu源码解析【03】qom实例 arm_sbcon_i2c实例 以hw/i2c/arm_sbcon_i2c.c代码为例,这个实例很简单,只用100行左右的代码,调用qemu系统接口实现了一个i2c硬件模拟先看include/hw/i2c/arm_s…

小程序自定义tab-bar,踩坑记录

从官方下载代码 https://developers.weixin.qq.com/miniprogram/dev/framework/ability/custom-tabbar.html 1、把custom-tab-bar 文件放置 pages同级 修改下 custom-tab-bar 下的 JS文件 Component({data: {selected: 0,color: "#7A7E83",selectedColor: "#3…

操作系统(14)请求分页

前言 操作系统中的请求分页,也称为页式虚拟存储管理,是建立在基本分页基础上,为了支持虚拟存储器功能而增加了请求调页功能和页面置换功能的一种内存管理技术。 一、基本概念 分页:将进程的逻辑地址空间分成若干个大小相等的页&am…

git企业开发的相关理论(一)

目录 一.初识git 二.git的安装 三.初始化/创建本地仓库 四.配置用户设置/配置本地仓库 五.认识工作区、暂存区、版本库 六.添加文件__场景一 七.查看 .git 文件/添加到本地仓库后.git中发生的变化 1.执行git add后的变化 index文件(暂存区) log…

wxpython图形用户界面编程

wxpython图形用户界面编程 一、wxpython的基础 1.1 wxpython的基础 作为图形用户界面开发工具包 wxPython,主要提供了如下 GUI 内容: 窗口。控件。事件处理。布局管理。 1.2 wxpython的类层次机构 1.3 wxpython的安装 Windows 和 macOS 平台安装&a…

水仙花数(流程图,NS流程图)

题目:打印出所有的100-999之间的"水仙花数",并画出流程图和NS流程图。所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为1531的三次方&#…

不配置python环境,直接用PyCharm就可以?

有的伙伴可能遇到不安装python环境只安装pycharm也可以进行运行代码。 所以自认为是不需要解释器就可以运行? 这个是不现实的,有很多伙伴可能是安装了Pycharm,但Pycharm看你电脑上没有解释器,所以在安装的时候给你默认安装在C盘…

网络安全渗透测试概论

渗透测试,也称为渗透攻击测试是一种通过模拟恶意攻击者的手段来评估计算机系统、网络或应用程序安全性的方法。 目的 旨在主动发现系统中可能存在的安全漏洞、脆弱点以及潜在风险,以便在被真正的恶意攻击者利用之前,及时进行修复和加固&…

爬虫数据能用于商业吗?

在当今数字化时代,数据已成为企业获取竞争优势的关键资源。网络爬虫作为一种数据收集工具,能够从互联网上抓取大量数据,这些数据在商业分析中扮演着重要角色。然而,使用爬虫技术获取的数据是否合法、能否用于商业分析,…

前端面试汇总(不定时更新)

目录 HTML & CSS1. XML、HTML、XHTML 有什么区别?⭐2. XML和JSON的区别?3. 是否了解W3C的规范?⭐4. 什么是语义化标签?⭐⭐5. 行内元素和块级元素的区别?⭐6. 行内元素和块级元素的转换?⭐7. 常用的块级…

SpringCloud微服务实战系列:03spring-cloud-gateway业务网关灰度发布

目录 spring-cloud-gateway 和zuul spring webflux 和 spring mvc spring-cloud-gateway 的两种模式 spring-cloud-gateway server 模式下配置说明 grayLb://system-server 灰度发布代码实现 spring-cloud-gateway 和zuul zuul 是spring全家桶的第一代网关组件&#x…

QT3学习之进阶理解信号和槽:如何自定义一个类信号,供其它类调用槽函数

下面是QWidget源码,定义了两个事件 /*!This event handler can be reimplemented in a subclass to receivewidget enter events.An event is sent to the widget when the mouse cursor enters thewidget.\sa leaveEvent(), mouseMoveEvent(), event() */void QWi…

GaLore和Q-GaLore:一种记忆高效的预训练和微调策略,用于大型语言模型(LLMs)

GaLore和Q-GaLore:一种记忆高效的预训练和微调策略,用于大型语言模型(LLMs) GaLore和Q-GaLore的设计背景、工作原理及其优势 设计背景 随着大型语言模型(LLMs)的发展,模型的规模和复杂性不断…

【网络云计算】2024第51周-每日【2024/12/17】小测-理论-解析

文章目录 1. 计算机网络有哪些分类2. 计算机网络中协议与标准的区别3. 计算机网络拓扑有哪些结构4. 常用的网络设备有哪些,分属于OSI的哪一层5. IEEE802局域网标准有哪些 【网络云计算】2024第51周-每日【2024/12/17】小测-理论-解析 1. 计算机网络有哪些分类 计算…

ActiveMQ 反序列化漏洞CVE-2015-5254复现

文章目录 一、产生原因二、利用条件三、利用过程四、PoC(概念验证)五、poc环境验证使用find搜索vulhub已安装目录打开activeMQ组件查看配置文件端口启动镜像-文件配置好后对于Docker 镜像下载问题及解决办法设置好镜像源地址,进行重启docker查…

shardingsphere分库分表跨库访问 添加分片规则

shardingsphere分库分表跨库访问 添加分片规则 建立 JDBC 环境 创建表 t_order: CREATE TABLE t_order (tid bigint(20) NOT NULL,tname varchar(255) DEFAULT NULL,goods_id bigint(20) DEFAULT NULL,tstatus varchar(255) DEFAULT NULL,PRIMARY KEY (tid) ) E…

C++ 中,构造函数、拷贝构造函数和移动构造函数区别

在 C 中,构造函数、拷贝构造函数和移动构造函数是类中用于对象初始化的三种不同类型的构造函数。它们的功能和使用场景有所不同,下面详细解释它们之间的区别。 1. 构造函数 (Constructor) 定义: 构造函数是一个特殊的成员函数,用…

MYSQL执行一条update语句,期间发生了什么

客户端先通过连接器建立连接,连接器自会判断用户身份; 因为这是一条 update 语句,所以不需要经过查询缓存,但是表上有更新语句,是会把整个表的查询缓存清空的,所以说查询缓存很鸡肋,在 MySQL 8…

vue3监听横向滚动条的位置;鼠标滚轮滑动控制滚动条滚动;监听滚动条到顶端

1.横向取值scrollLeft 竖向取值scrollTop 2.可以监听到最左最右侧 3.鼠标滚轮滑动控制滚动条滚动 效果 <template><div><div class"scrollable" ref"scrollableRef"><!-- 内容 --><div style"width: 2000px; height: 100…

深入理解MyBatis的Mapper层:让数据访问更高效

目录 1. 什么是MyBatis的Mapper层&#xff1f; 1.1 典型的Mapper层结构 1.2 示例&#xff1a;一个简单的用户管理系统 2. 创建Mapper层 2.1 创建实体类 2.2 创建Mapper接口 2.3 创建Mapper XML文件&#xff08;可选&#xff09; 2.4 配置MyBatis的SQL映射 3. 使用Mapp…