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

参考知乎文章链接: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. 【全新重构发布】iNeuOS工业互联网操作系统 V5 版本

    iNeuOS工业互联网操作系统历经迭代27个版本,老版本截止更新V4.1版本:历时一年多时间,现在正式发布全新V5版本,V5版本与V4.1老版本不完全兼容. 发布V5版本后,iNeuOS工业互联网操作 ...

  2. GC的前置工作,聊聊GC是如何快速枚举根节点的

    本文已收录至GitHub,推荐阅读 Java随想录 微信公众号:Java随想录 原创不易,注重版权.转载请注明原作者和原文链接 目录 什么是根节点枚举 根节点枚举存在的问题 如何解决根节点枚举的问题 ...

  3. 万字长文硬核AQS源码分析

    阅读本文前,需要储备的知识点如下,点击链接直接跳转. java线程详解 Java不能操作内存?Unsafe了解一下 一文读懂LockSupport AQS简介 AQS即AbstractQueuedSy ...

  4. 构建iOS交叉编译环境

    要进行高级的iOS编程,我们需要很多工具链来帮我们完成这一目的 构建iOS交叉编译环境: 1.新建一个iphone交叉编译虚拟机 2. 为我们的虚拟机添加第二个网卡,设为host-only来达到能与宿 ...

  5. hihocoder 1290 DP

    题目利用DP思想,dp[i][j][k]表示robot跑到i行j列目前移动方向为k时,所需要的最小的flip.其中0 <= i <= N,0 <= j <= M,k = rig ...

  6. 【RocketMQ】消息的消费总结

    消费者从Broker拉取到消息之后,会将消息提交到线程池中进行消费,RocketMQ消息消费是批量进行的,如果一批消息的个数小于预先设置的批量消费大小,直接构建消费请求ConsumeRequest将消 ...

  7. 关于Unity 如何与Blazor Server结合

    关于Unity 如何与Blazor Server结合 一.介绍 最近工作中有`Unity`与`Blazor Server`结合的需求,在网上找了一圈,发现这方面的资料比较少,特此写下这篇记录一下自己的 ...

  8. 数据库sql中处理时间冲突问题

    数据库现有数据其中两列: s - 开始时间, e - 结束时间. 在新插入数据s', e'之前需要判断两个时间之间是否有重合 因为使用mybatis-plus的缘故, 结论都使用s或e在符号前面. 1 ...

  9. 基于Spring事件驱动模式实现业务解耦

    事件驱动模式 举个例子 大部分软件或者APP都有会有会员系统,当我们注册为会员时,商家一般会把我们拉入会员群.给我们发优惠券.推送欢迎语什么的. 值得注意的是: 注册成功后才会产生后面的这些动作: 注 ...

  10. jdk-14.0.1环境搭建及cmd环境编译执行

    1.安装包获取 https://www.oracle.com/java/technologies/javase/jdk14-archive-downloads.html 2.环境变量配置 最新版本的J ...