图像处理基础

简介: 图像处理基础

现如今我们每时每刻都在与图像打交道,而图像处理也是我们绕不开的问题,本文将会简述图像处理的基础知识以及对常见的裁剪、画布、水印、平移、旋转、缩放等处理的实现。



01

图像处理基础


在进行图像处理之前,我们必须要先回答这样一个问题:什么是图像?

答案是像素点的集合。

如上图所示,假设红色圈的部分是一幅图像,其中每一个独立的小方格就是一个像素点(简称像素),像素是最基本的信息单元,而这幅图像的大小就是 11 x 11 px 。


1、二值图像

图像中的每个像素点只有黑白两种状态,因此每个像素点的信息可以用 0 和 1 来表示。


2、灰度图像

图像中的每个像素点在黑色和白色之间还有许多级的颜色深度(表现为灰色),通常我们使用 8 个 bit 来表示灰度级别,因此总共有 2 ^ 8 = 256 级灰度,所以可以使用 0 到 255 范围内的数字来对应表示灰度级别。


3、RGB图像

红(Red)、绿(Green)、蓝(Blue)作为三原色可以调和成任意的颜色,对于 RGB 图像,每个像素点包含 RGB 共三个通道的基本信息,类似的,如果每个通道用 8 bit 表示即 256 级灰度,那么一个像素点可以表示为:

([0 ... 255], [0 ... 255], [0 ... 255])



图像矩阵

每个图像都可以很自然的用矩阵来表示,每个像素对应矩阵中的每个元素。


例如:

1、4 x 4 二值图像:


2、4 x 4 灰度图像:


3、4 x 4 RGB 图像:


在编程语言中使用哪种数据类型来表示矩阵?答案是多维数组。例如上述 4 x 4 RGB 图像可转换为:


图像处理的本质实际上就是在处理像素矩阵即像素多维数组运算。



02

基本处理实现


对于图像的基本处理,本文示例使用的是 opencv-python 和 numpy 库。


示例:

  1. 裁剪:切割矩阵即可。
  2. 画布:先构建指定大小的画布背景,再填充图像即可。
  3. 水印:矩阵合并运算,使用 cv : addWeighted 方法。
  4. 平移:构建平移变换矩阵,使用 cv : warpAffine 方法。
  5. 旋转:构建旋转变换矩阵,使用 cv : warpAffine 方法。
  6. 缩放:使用 cv : resize 方法。


OpenCV 提供的 resize 缩放算法包括:


根据官方的文档,缩小图像时建议使用 INTER_AREA 算法,放大图像时建议使用 INTER_CUBIC(较慢)算法或者 INTER_LINEAR(更快效果也不错)算法。




本文介绍了图像处理的基础,以及通过 OpenCV 实现了几种常见的图像处理功能。

目录
相关文章
EMQ
|
存储 网络协议 IDE
如何在 Java 中使用 MQTT
本文主要介绍如何在Java项目中使用MQTT,实现MQTT客户端与服务器的连接、订阅和收发消息等功能。
EMQ
2061 0
如何在 Java 中使用 MQTT
|
开发框架 前端开发 .NET
分享119个ASP.NET源码总有一个是你想要的
分享119个ASP.NET源码总有一个是你想要的
317 1
|
网络协议 安全
libev与多线程
libev与多线程
libev与多线程
技术宅之---用手机实现“移动网关”
本文假定读者已知道内网穿透相关认知。 或许你用过花生壳、frp、ngrok、teamviewer等穿透工具,今天要给大家介绍的是smarGate(https://github.com/lazy-luo/smarGate) 1、samrGate是什么? 官方命名为“移动网关”,通过手机客户端将位于内网的服务端网络进行按需暴露。
4026 0
|
iOS开发 MacOS
MAC OS更新系统后IDEA中的SVN报错无法使用
MAC OS更新系统后IDEA中的SVN报错无法使用
|
负载均衡 5G UED
蜂窝网络中的切换(Handover)及其类型详解
蜂窝网络中的切换(Handover)及其类型详解
1661 12
|
Windows
|
监控 Linux Shell
Linux系统之部署Linux命令大全搜索工具
【7月更文挑战第24天】Linux系统之部署Linux命令大全搜索工具
395 3
Linux系统之部署Linux命令大全搜索工具
|
网络协议 网络性能优化 网络架构
运输层---概述
运输层---概述
280 2
|
人工智能 运维 Devops
《AIGC+软件开发新范式》--01.当「软件研发」遇上 AI 大模型(3)
在AI 热度持续上升的当下,阿里云推出AI智能编码助手—通义灵码。通义灵码是一款基于阿里云通义代码大模型打造的智能编码助手,基于海量优秀开源代数据集和编程教科书训练,为开发者带来高效、流畅的编码体验。
338 1