当前位置: 首页 > 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

http://www.lryc.cn/news/12288.html

相关文章:

  • 创建和销毁对象——遇到多个构造器参数时要考虑使用构建器
  • 【c++学习】入门c++(中)
  • 论文阅读_AlphaGo_Zero
  • 一文教你用Python创建自己的装饰器
  • 华为OD机试 - 任务总执行时长(JS)
  • pytorch离线快速安装
  • 华为OD机试 - 数组合并(JS)
  • 不要让GPT成为你通向“学业作弊”的捷径——使用GPT检测工具来帮助你保持正确的方向
  • 基于matlab的斜视模式下SAR建模
  • 15-基础加强-1-类加载器反射
  • 基于SSM,Spring, BootStrap 毕业设计管理系统的设计与实现
  • 一招鉴别真假ChatGPT,并简要介绍ChatGPT、GPT、GPT2和GPT3模型之间的区别和联系
  • 华为OD机试 - 特异性双端队列(JS)
  • Nginx自动封禁可疑Ip
  • 分布式事务--理论基础
  • Matlab数学建模常用算法及论文插图绘制模板资源合集
  • C语言【动态内存管理 后篇】
  • 四大步骤,教你彻底关闭Win10自动更新
  • 通信算法之一百零四:QPSK完整收发仿真链路
  • 时间复杂度(超详解+例题)
  • 【Java面试总结】Maven篇
  • 【每日一题Day123】LC1792最大平均通过率 | 堆
  • [安装之5] Mac pro更换大内存固态硬盘实践教程
  • 04 Python变量的声明与使用
  • LeetCode 2418. 按身高排序
  • 一文了解Hotspot虚拟机下JAVA对象从创建到回收的生命周期
  • 【Java基础】Java对象创建的几种方式
  • 社保缴费满15年就可以不缴了?6个很多人最关心的问题权威解答来了
  • 关于HDFS
  • C++入门:类 对象