图像处理是图像识别过程中重要一环,一张图像可能包括海量的不明确的信息,图像处理的目的是消除图像中无关的信息,恢复有用的真实信息,增强有效信息的可检测性,最大限度地简化数据。

参考知乎文章链接:https://zhuanlan.zhihu.com/p/547096645

主要学习图像处理的一些手段和方法

1、图像灰度化

图像灰度化指以黑色为基准色,用不同亮度的黑色来显示图像,通常为从0%(白色)到100%(黑色)的亮度值。图像灰度化可以将彩色图转换为灰度图。

在RGB模型中,R=G=B时表示为灰度颜色,其中R=G=B的值叫灰度值。在下图中,立方体中的虚线即为R=G=B时的灰度颜色。R=G=B=0时,灰度值为0,颜色为黑色;R=G=B=255时,灰度值为255,颜色为白色。

2、图像二值化

图像二值化是一种特殊的灰度化,就是将灰度值设置为0或255,也就是整个图像非黑即白。图像二值化的目的是尽可能的去除干扰信息,获取目标信息。一般会先将图片灰度化,再进行二值化。

图像二值化最常使用的方法是设定一个全局的阈值 T ,用 T 将图像分割为两类像素:大于 T 的像素群和小于 T 的像素群,然后将两类像素群分别设定为白色或黑色。这种方法称为固定阈值法。

3、图像的按位逻辑运算

图像的按位逻辑运算就是将两幅图的每个像素进行按位逻辑运算,简称位运算。

常见的位运算有4种:按位与、按位或、按位异或、按位取反  具体介绍可参考:https://www.cnblogs.com/Zhouce/p/17859435.html

(1)按位与运算,用 and 表示按位与运算,1表示真,0表示假。

将任何数值N(范围0-255)与数值0(二进制为0000 0000)进行按位与运算,都会得到数值0。

将任何数值N(范围0-255)与数值255(二进制为1111 1111)进行按位与运算,都会得到数值本身。

(2)按位或运算,用 or 表示按位或运算,两个逻辑值只要有一个为真时,结果就为真。

(3)按位非运算,用 not 表示按位非运算,当输入为真时,结果为假;当输入为假时,结果为真。

(4)按位异或运算,用 xor 表示按位异或运算,两个逻辑值相反时,结果才为真。

彩图中,每个像素以(R,G,B)值表示,位运算时,先将R、G、B值转换为二进制值,然后做位运算。比如,像素1(0,198,219)与像素2(198,219,1)进行按位异或运算时,先将所有数值转换成二进制数,如下表。

像素 十进制值 二进制值
像素1-R 0 0000 0000
像素1-G 198 1100 0110
像素1-B 219 1101 1011
像素1-R 198 1100 0110
像素1-G 219 1101 1011
像素1-B 1 0000 0001

需要注意的是,必须是尺寸一致的图像才能进行位运算。如果两张图片尺寸不一致,可以先剪裁成同一尺寸,再做位运算。

4、图像掩膜

简单来说,掩膜是用一幅二值化图片对另外一幅图片进行局部的遮挡,一般将二值化图称为掩模图像。

比如下图中,用左边的二值化图对中间的彩图进行掩模,掩模的结果如右图所示。

5、在Opencv中图像的按位逻辑运算

常见的4种图像按位逻辑运算在opencv库中可分别通过“cv2.bitwise_and()”、“cv2.bitwise_or()”、“cv2.bitwise_xor()”、“cv2.bitwise_not()”四个函数来实现。

以按位与运算为例:

1 color =  np.zeros((320, 240, 3),dtype=np.uint8) # 创建一个三维零矩阵,类型为uint8
2 color[:,:,0] = 12 # B # 遍历所有行,遍历所有列,赋值蓝色通道的值为12
3 color[:,:,1] = 12 # G # 遍历所有行,遍历所有列,赋值蓝色通道的值为12
4 color[:,:,2] = 12 # R # 遍历所有行,遍历所有列,赋值蓝色通道的值为12
5 mask = cv2.inRange(hsv, lower, upper) # 色彩阈值化所得图
6 B2 = cv2. bitwise_and(color,color, mask=mask) # 按位与运算

其中,“color”指的是原图,“mask”是另一张图,B2是先将两张原图进行与运算,再将得到的图与mask图进行与运算,最终得到的图。

Opencv学习笔记(2)的更多相关文章

  1. opencv学习笔记(七)SVM+HOG

    opencv学习笔记(七)SVM+HOG 一.简介 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子 ...

  2. opencv学习笔记(六)直方图比较图片相似度

    opencv学习笔记(六)直方图比较图片相似度 opencv提供了API来比较图片的相似程度,使我们很简单的就能对2个图片进行比较,这就是直方图的比较,直方图英文是histogram, 原理就是就是将 ...

  3. opencv学习笔记(五)镜像对称

    opencv学习笔记(五)镜像对称 设图像的宽度为width,长度为height.(x,y)为变换后的坐标,(x0,y0)为原图像的坐标. 水平镜像变换: 代码实现: #include <ios ...

  4. opencv学习笔记(四)投影

    opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: #include <cv.h> #include <highgui.h> using namespace ...

  5. opencv学习笔记(三)基本数据类型

    opencv学习笔记(三)基本数据类型 类:DataType 将C++数据类型转换为对应的opencv数据类型 OpenCV原始数据类型的特征模版.OpenCV的原始数据类型包括unsigned ch ...

  6. opencv学习笔记(二)寻找轮廓

    opencv学习笔记(二)寻找轮廓 opencv中使用findContours函数来查找轮廓,这个函数的原型为: void findContours(InputOutputArray image, O ...

  7. opencv学习笔记(一)IplImage, CvMat, Mat 的关系

    opencv学习笔记(一)IplImage, CvMat, Mat 的关系 opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,M ...

  8. paper 93:OpenCV学习笔记大集锦

    整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的.如果有好的资源,也欢迎介绍和分享. 1:OpenCV学习笔记 作者:CSDN数量:55篇博文网址: ...

  9. (转) OpenCV学习笔记大集锦 与 图像视觉博客资源2之MIT斯坦福CMU

          首页 视界智尚 算法技术 每日技术 来打我呀 注册     OpenCV学习笔记大集锦 整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的 ...

  10. OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波

    http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 201 ...

随机推荐

  1. 使用kubeadm部署kubernetes

    k8s版本:1.15.0 前期准备 节点: master:172.50.13.103(2核2G) node-1:172.50.13.104(2核2G) node-2:172.50.13.105(2核2 ...

  2. 干了这么多年C#,后悔没早点用这种“分页”,简单/高效/易维护

    [前言] 干了这么多年C#,后悔没早点用这种"分页",简单/高效/易维护,比其它的分页方式强多了,不信你自己看. [正文] 支持.Net Core(2.0及以上)与.Net Fra ...

  3. BUUCTF-RE-[BJDCTF2020]BJD hamburger competition

    啊这,点进去康康 dnspy反编译的题,https://www.52pojie.cn/thread-495115-1-1.html 里面有详细介绍 然后文件很多,我不知道找哪一个下手 看其他师傅的wp ...

  4. 《SQL与数据库基础》20. 主从复制

    目录 主从复制 原理 搭建 主库配置 从库配置 测试 本文以 MySQL 为例 主从复制 主从复制是指将主数据库的 DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执 ...

  5. vue3+ts Axios封装—重复请求拦截

    创建好vue3项目 1.安装Axios与Element Plus Axios安装 npm install axios Element Plus 安装 官网入口:https://element-plus ...

  6. 第2章 Git安装

    兄弟,恭喜你,刷到这篇超详细安装GIt教程,就让Codeyang带你一步一步的安装Git!~~ Git官网地址: https://git-scm.com/ 查看 GNU 协议,可以直接点击下一步. 选 ...

  7. 利用别名简化进入docker容器数据库的操作

    之前研究docker和数据库的交互,越发对docker这个东西喜爱了.因为平常偶尔会用到各类数据库测试环境验证一些想法,需要进一步简化进入到这些环境的步骤. 比如我现在有三套docker容器数据库测试 ...

  8. 2023-09-16:用go语言,给你一个整数 n 和一个在范围 [0, n - 1] 以内的整数 p , 它们表示一个长度为 n 且下标从 0 开始的数组 arr , 数组中除了下标为 p 处是 1

    2023-09-16:用go语言,给你一个整数 n 和一个在范围 [0, n - 1] 以内的整数 p , 它们表示一个长度为 n 且下标从 0 开始的数组 arr , 数组中除了下标为 p 处是 1 ...

  9. Node学习第一步 | 简介及安装

    什么是node Javascript可以在浏览器运行, node可以让javascript在浏览器之外运行 可以用来做本地运行的软件/网络服务器/游戏等等 记得安装vs code里面力扣插件需要先安装 ...

  10. OPPO主题组件开发 - 调试与预览

    本篇作为 OPPO主题组件调试与预览 文档的补充,因为它真的很简单而且太老,一些命令已发生变化 1. 调试前准备 1. PC 端下载 adb命令工具 下载 https://adbdownload.co ...