图像处理是图像识别过程中重要一环,一张图像可能包括海量的不明确的信息,图像处理的目的是消除图像中无关的信息,恢复有用的真实信息,增强有效信息的可检测性,最大限度地简化数据。
参考知乎文章链接: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图进行与运算,最终得到的图。
标签:运算,color,笔记,像素,学习,Opencv,按位,图像,灰度 From: https://www.cnblogs.com/Zhouce/p/17864771.html