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

【Opencv 系列】第1章 图像基础

通过本套课程,可以学到:
1.opencv的基本操作
2.两个案例,目标追踪&人脸识别
对重点内容,我会提示,包括我再准备这套课程过程中遇到的坑点!
最后代码我会放到git上,章节顺序一致:https://github.com/justinge/opencv_tutorial.git

系列文章目录

第1章 Opencv 图像基础 和 argparse模块
第2章 Opencv 读取、保存图片和视频
第3章 Opencv 图像的8种变换
第4章 Opencv 直方图
第5章 Opencv 画出基本图形以及显示文本
第6章 Opencv 人脸检测(Haar/dlib) & 关键点检测
第7章 Opencv 目标跟踪
第8章 Opencv 人脸识别


文章目录

  • 系列文章目录
  • 1 知识点
    • 1.1 基本概念
  • 1.2. 坐标系
    • 1.3 基本操作
    • 1.4 BGR顺序
  • 2. 实际应用
    • 2.1 对待彩色图
    • 2.2 用plt的方式显示图片
  • 3. argparse模块
    • 3.1 使用方式
  • 总结


1 知识点

1.1 基本概念

像素:计算机屏幕上所能显示的最小单位。用来表示图像的单位。
RGB,R : Red,G : Green,B : Blue,范围0~255。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2. 坐标系

这个logo像素是:18 X 20 = 360 pixels
坐标系的原点(0,0)在左上角,每一个点的坐标是:
(height, width, channel)。
在这里插入图片描述

1.3 基本操作

基于彩色图片

  1. 读取图片: cv2.imread()
  2. 读取图片的形状: img.shape. 返回一个(rows,heights,channels) 注意和pytorch不同
  3. 获取图片大小: img.size, 返回 rowsheightschannels.
  4. 显示图片:cv2.imshow()
  5. 等待:cv2.waitKey(0)
  6. 关闭:cv2.destroyAllWindows()

基于灰度图片

  1. 读取图片: cv2.imread(img,cv2.IMREAD_GRAYSCALE)
  2. 获取图片形状:img.shape,返回一个(rows,heights), 注意这里没有channels了 因为就一个通道了.

1.4 BGR顺序

opencv的 channel顺序是BGR, pillow模块和pytorch都是RGB的,这个需要注意,另外还有channels=4的一种格式的图片.png的,读取的时候需要转成三维的,反正吧,不是3channel,就转成3channel是个好习惯. 一般框架都会有这一步.
在这里插入图片描述
一个像素点也是有三个值的.

2. 实际应用

2.1 对待彩色图

在这里插入图片描述

import cv2
img = cv2.imread("../images/children.jpg")
# 显示图片
cv2.imshow('image1',img)
# 把一块写成红色
img[6:40,6:40] = (0,0,255)
cv2.imshow('image2',img)
# 等待
cv2.waitKey(0)
# 关闭所有窗口
cv2.destroyAllWindows()

给logo的颜色换个顺序
在这里插入图片描述

2.2 用plt的方式显示图片

import matplotlib.pyplot as plt
plt.subplot(121)
plt.imshow(img_logo)
plt.subplot(122)
plt.imshow(img_logo_new)
plt.show()

在这里插入图片描述

3. argparse模块

看名字 argparse = arg+parse 也就是命令行参数解析的意思
argparse模块使编写用户友好的命令行接口变得容易,程序定义了它需要的参数,而argparse将找出如何从sys.argv中解析这些参数,argparse模块还会自动生成帮助和使用消息,并在用户给程序提供无效参数时发出错误信息。

3.1 使用方式

import argparse		# 导入库
parser = argparse.ArgumentParser()	# 获取所有参数
parser.add_argument(-n1”,--number one”, help=“第一个参数”, type=int) # 添加参数1
parser.add_argument(-n2”,--number two”, help=“第二个参数”, type=int) # 添加参数2
args = parser.parse_args()	# 解析所有参数

(1)官网教程1:
https://docs.python.org/3/howto/argparse.html

(2)官网教程2:https://docs.python.org/3/library/argparse.html#module-argparse

总结

## 两种方式来挑整通道顺序
img_logo_new = cv2.cvtColor(img_logo, cv2.COLOR_BGR2RGB) # BGR -> RGB## 手动方式转成RGB
b,g,r = cv2.split(img_logo)
img_new = cv2.merge([r, g, b])

git地址:https://github.com/justinge/opencv_tutorial.git

相关文章:

【Opencv 系列】第1章 图像基础

通过本套课程,可以学到: 1.opencv的基本操作 2.两个案例,目标追踪&人脸识别 对重点内容,我会提示,包括我再准备这套课程过程中遇到的坑点! 最后代码我会放到git上,章节顺序一致:https://github.com/justinge/opencv_tutorial.git 系列文章目录 第1章 Opencv 图像基础 和 …...

创建和销毁对象——遇到多个构造器参数时要考虑使用构建器

静态工厂和构造器有个共同的局限性:它们都不能很好地扩展到大量的可选参数。比如用一个类表示包装食品外面显示的营养成分标签。这些标签中有几个域是必需的:每份的含量、每罐的含量以及每份的卡路里。还有超过20个的可选域:总脂肪量、饱和脂…...

【c++学习】入门c++(中)

目录一. 前言二. 函数重载1. 概念2.函数名修饰规则三 .引用(&)1. 概念2. 引用特性3.应用1.做参数2. 做返回值3. 传值、传引用效率比较4.引用和指针的区别四 . 结语一. 前言 小伙伴们大家好,今天我们继续学习c入门知识,今天的…...

论文阅读_AlphaGo_Zero

论文信息 name_en: Mastering the game of Go without human knowledge name_ch: 在没有人类知识的情况下掌握围棋游戏 paper_addr: http://www.nature.com/articles/nature24270 doi: 10.1038/nature24270 date_publish: 2017-10-01 tags: [‘深度学习’,‘强化学习’] if: 6…...

一文教你用Python创建自己的装饰器

python装饰器在平常的python编程中用到的还是很多的,在本篇文章中我们先来介绍一下python中最常使用的staticmethod装饰器的使用。 目录一、staticmethod二、自定义装饰器python类实现装饰器python函数嵌套实现装饰器多个装饰器调用三、带参数的装饰器一、staticmet…...

华为OD机试 - 任务总执行时长(JS)

任务总执行时长 题目 任务编排服务负责对任务进行组合调度。参与编排的任务又两种类型,其中一种执行时长为taskA,另一种执行时长为taskB。任务一旦开始执行不能被打断,且任务可连续执行。服务每次可以编排num个任务。 请编写一个方法,生成每次编排后的任务所有可能的总执…...

pytorch离线快速安装

1.pytorch官网查看cuda版本对应的torch和torchvisionde 版本(ncvv -V,nvidia-sim查看cuda对应的版本) 2.离线下载对应版本,网址https://download.pytorch.org/whl/torch_stable.html 我下载的: cu113/torch-1.12.0%2Bcu113-cp37-cp37m-win_…...

华为OD机试 - 数组合并(JS)

数组合并 题目 现在有多组整数数组,需要将他们合并成一个新的数组。 合并规则,从每个数组里按顺序取出固定长度的内容合并到新的数组中, 取完的内容会删除掉, 如果该行不足固定长度或者已经为空, 则直接取出剩余部分的内容放到新的数组中,继续下一行。 如样例1,获得长度3,先遍…...

不要让GPT成为你通向“学业作弊”的捷径——使用GPT检测工具来帮助你保持正确的方向

不要让GPT成为你通向“学业作弊”的捷径——使用GPT检测工具来帮助你保持正确的方向 最近,多所美国高校以及香港大学等都明确禁止在校使用ChatGPT等智能文本生成工具。GPT(Generative Pre-trained Transformer)是一种自然语言处理技术&#x…...

基于matlab的斜视模式下SAR建模

一、前言此示例说明如何使用线性 FM (LFM) 波形对基于聚光灯的合成孔径雷达 (SAR) 系统进行建模。在斜视模式下,SAR平台根据需要从宽侧斜视一定角度向前或向后看。斜视模式有助于对位于当前雷达平台位置前面的区域进行…...

15-基础加强-1-类加载器反射

文章目录1.类加载器1.1类加载器【理解】1.2类加载的过程【理解】1.3类加载的分类【理解】1.4双亲委派模型【理解】1.5ClassLoader 中的两个方法【应用】2.反射2.1反射的概述【理解】2.2获取Class类对象的三种方式【应用】 第1步:获取类的Class对象2.3反射获取构造方…...

基于SSM,Spring, BootStrap 毕业设计管理系统的设计与实现

目录 一.前言介绍 二、主要技术 2.1 SSM框架介绍 2.2 MYSQL数据库 2.3 持久层框架MyBatis 2.4 前端框架BootStrap 三. 系统设计 3.1 系统架构设计 3.2 系统功能模块 3.2.1 学生模块 3.2.2 教师模块 3.2.3 管理员模块 四、数据库设计 4.1 数据分析 4.2 概念设计 …...

一招鉴别真假ChatGPT,并简要介绍ChatGPT、GPT、GPT2和GPT3模型之间的区别和联系

以下内容除红色字体部分之外,其他均来源于ChatGPT自动撰写。 ChatGPT是基于GPT模型的对话生成模型,旨在通过对话模拟实现自然语言交互。它是为了改善人机对话体验而设计的,主要应用于聊天机器人、智能客服等场景。 与GPT模型相比,…...

华为OD机试 - 特异性双端队列(JS)

特异性双端队列 题目 有一个特异性的双端队列,该队列可以从头部到尾部添加数据,但是只能从头部移除数据。 小A一次执行 2n 个指令往队列中添加数据和移除数据, 其中 n 个指令是添加数据(可能从头部也可以从尾部添加) 依次添加 1 到 n , n 个指令是移出数据 现在要求移除数…...

Nginx自动封禁可疑Ip

文章目录一、Nginx封禁ip1、简介2、nignx 禁止IP访问2.1 方法一2.2 方法二3、关于 deny 的使用二、脚本自动封禁Ip1、流程介绍2、脚本实战2.1 核心脚本解释2.2 编写shell脚本2.3 crontab定时一、Nginx封禁ip 1、简介 在网站维护过程中,有时候我们需要对一些IP地址…...

分布式事务--理论基础

1、事务基础 1.1、什么是事务 事务可以看做是一次大的活动,它由不同的小活动组成,这些活动要么全部成功,要么全部失败。 1.2、本地事务 在同一个进程内,控制同一数据源的事务,称为本地事务。例如数据库事务。 在计…...

Matlab数学建模常用算法及论文插图绘制模板资源合集

最近有很多朋友咨询我关于Matlab论文插图绘制方面的问题。 问了一下,这些朋友中,除了写博士论文的,大部分都是要参加美赛的。 这让我突然想起,自己曾经为了水论文,购买过一批Matlab数学建模的资料。 想了想&#xf…...

C语言【动态内存管理 后篇】

动态内存管理 后篇🫅经典例题🤦‍♂️题目1🤦‍♂️题目2🤦‍♂️题目3🤦‍♂️题目4🫅C/C程序的内存开辟前面的一篇文章动态内存管理 前篇,我们已经了解过了动态内存管理的相关信息&#xff0c…...

四大步骤,教你彻底关闭Win10自动更新

文章目录一、禁用Windows Update服务二、在组策略里关闭Win10自动更新相关服务三、禁用任务计划里边的Win10自动更新四、在注册表中关闭Win10自动更新参考资料一、禁用Windows Update服务 1、同时按下键盘 Win R,打开运行对话框,然后输入命令 services…...

通信算法之一百零四:QPSK完整收发仿真链路

1.发射机物理层基带仿真链路 1.1 % Generates the data to be transmitted [transmittedBin, ~] BitGenerator(); 2.2 % Modulates the bits into QPSK symbols modulatedData QPSKModulator(transmittedBin); 2.3 % Square root Raised Cosine Transmit Filter %comm…...

Cursor智能体学习工具:构建专属AI编程知识库的完整指南

1. 项目概述:一个为开发者量身定制的Cursor智能体学习工具如果你是一名开发者,并且最近正在尝试使用Cursor这款AI编程工具,那么你很可能和我一样,经历过一个既兴奋又有点迷茫的阶段。Cursor的强大毋庸置疑,它能理解上下…...

如何用Xenia Canary模拟器重温Xbox 360经典游戏?终极配置与优化指南

如何用Xenia Canary模拟器重温Xbox 360经典游戏?终极配置与优化指南 【免费下载链接】xenia-canary Xbox 360 Emulator Research Project 项目地址: https://gitcode.com/gh_mirrors/xe/xenia-canary Xenia Canary是一款免费开源的Xbox 360游戏模拟器&#…...

Uncle小说阅读器:桌面级智能小说聚合与个性化阅读方案

Uncle小说阅读器:桌面级智能小说聚合与个性化阅读方案 【免费下载链接】uncle-novel 📖 Uncle小说,PC版,一个全网小说下载器及阅读器,目录解析与书源结合,支持有声小说与文本小说,可下载mobi、e…...

别再只盯着GPS了!用Python解析NMEA数据,5分钟搞定无人机/车载定位数据读取

用Python轻松解析NMEA数据:从无人机到车载系统的实战指南 当你第一次拿到GPS模块输出的那串神秘字符时,可能会感到困惑——这些以$开头的文本究竟隐藏着什么秘密?NMEA协议作为全球定位设备的通用语言,承载着经纬度、速度、时间等关…...

从指标到版图:基于Cadence与gmid方法的两级运放实战设计

1. 两级运放设计入门:从指标到晶体管的思维转换 第一次接触两级运放设计时,我盯着性能指标表发呆了半小时。AV≥10M、CL10pf、SR10V/us这些数字就像天书,直到导师扔给我一本《模拟集成电路设计艺术》和一份Cadence使用手册。现在回想起来&…...

2025 上海 GEO 优化公司最新权威推荐:技术领航者与合作指南

一、核心关键词GEO 优化、生成式引擎优化、AI 搜索流量、上海 GEO 公司、本地服务 GEO、跨境 GEO、DeepSeek 排名优化、豆包排名优化、装修行业 GEO、B2B 获客优化、全域 AI 营销、合规 GEO 服务二、GEO 简介及上海市场现状分析1. GEO 核心定义GEO(Generative Engin…...

Adafruit退货政策全解析:电子元件退货的核心逻辑与实操指南

1. 退货政策的核心逻辑与适用场景 在创客圈和电子爱好者社群里,Adafruit 几乎是无人不晓的名字。无论是 Arduino 开发板、各种传感器,还是炫目的 NeoPixel LED 灯带,他们的产品是无数项目从想法变为现实的基石。但即便是最资深的玩家&#xf…...

Polymarket套利机器人:DeFi预测市场的自动化交易策略与实现

1. 项目概述:一个捕捉Polymarket预测市场套利机会的自动化交易机器人 最近在DeFi和预测市场领域,Polymarket这个基于Polygon链的平台热度持续攀升。它本质上是一个事件预测市场,用户可以就各类现实世界事件(比如“某球队能否赢得冠…...

基于代理建模与系统仿真的唐代政治制度数字重构

1. 项目概述与核心价值最近在开源社区里,我注意到一个名为“Tang-Political-System”的项目,它的名字直译过来是“唐代政治制度”。作为一个对历史、制度设计以及开源协作模式都抱有浓厚兴趣的开发者,这个项目立刻引起了我的注意。它并非一个…...

ARM核心板在POCT设备开发中的选型与应用实战

1. 项目概述:ARM核心板如何重塑POCT设备开发在医疗设备这个对稳定性和可靠性要求近乎苛刻的领域,每一次技术选型都像是一次精密的手术,容不得半点闪失。我接触过不少体外诊断(IVD)设备厂商,尤其是做即时检验…...