目录
1. 绘制中文
解释:
Image,ImageFont,ImageDraw是Pillow包下的模块,ImageFont.truetype(字体类型,尺寸)返回一个字体对象
之所以在学习opencv之前学习Pillow的原因是,Pillow可以支持中文,而opencv不支持中文。所以当图像中需要写中文时,可以使用Pillow
2. 鼠标事件
解释:鼠标回调函数,def mouse_call_back(event, x, y, flags, params):
这个函数会在鼠标事件发生时被调用。参数包括:
event
: 事件类型(如鼠标按下、移动、抬起等)。x
,y
: 鼠标当前的坐标。flags
: 额外信息(如鼠标按键状态)。params
: 附加参数(未使用)。
鼠标事件类型:
cv2.EVENT_LBUTTONDOWN
: 鼠标左键按下。cv2.EVENT_MOUSEMOVE
: 鼠标移动。cv2.EVENT_LBUTTONUP
: 鼠标左键抬起。
回调函数:
- 在设置鼠标回调时,必须提前创建窗口。因为setMouseCallback当填写的窗口名不存在该窗口时,他不会自动创建窗口,需要手动提前创建窗口
- 设置鼠标回调方法:cv2.setMouseCallback("win", mouse_call_back),第一个是窗口名,第二个是鼠标回调函数名称
3. 滑动条
解释: cv2.createTrackbar("R","Color Window",)创建三个滑动条,分别用于调整红色、绿色和蓝色的强度:
- 滑动条的名称是 "R"、"G" 和 "B"。
- 每个滑动条的初始值为 1,范围为 0 到 255(包括边界)。
- 每当滑动条的值变化时,会调用
change
函数。
使用 cv2.getTrackbarPos()
获取当前滑动条的值(红色、绿色和蓝色的强度)。
将获取的 RGB 值赋给背景图像 bg
,更新为相应的颜色。
4. 拆分合并通道
import cv2
im = cv2.imread("a.jpeg")
b, g, r = cv2.split(im)
# 获取Blue通道
b1 = im[:, :, 0]
# c = np.hstack((b, b1))
c = cv2.merge((b, g, r))
cv2.imshow("im", c)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.split(im)是分割图像为三个单通道的图像
cv2.merge((b,g,r))是合并三个单通道图像为一个BGR图像
5. 图像运算
6.图像融合
解释:使用c = cv2.addWeighted(im01, 0.7, im02, 0.3, 100)函数将两张图像进行加权融合。该函数的参数含义如下:
im01
: 第一张图像。0.7
: 第一张图像的权重(即贡献度)。im02
: 第二张图像。0.3
: 第二张图像的权重。100
: 在加权求和后添加的常数,用于调整亮度。
7. 图像位运算
71. 按位与bitwise_and(图1,图2)
7.2 按位或bitwise_or(图1,图2)
7.3 按位非bitwise_not(图像)
7.4 按位异或bitwise_xor(图1,图2)
8. HSV颜色空间
8.1 HSV介绍
1. Hue(色相)
色相是模型的颜色部分,用0到360度的数字表示
- Red falls between 0 and 60 degrees.
- Yellow falls between 61 and 120 degrees.
- Green falls between 121 and 180 degrees.
- Cyan falls between 181 and 240 degrees.
- Blue falls between 241 and 300 degrees.
- Magenta falls between 301 and 360 degrees.
2. Stauration饱和度
Saturation(饱和度)描述了特定颜色的灰度值,从0到100%。将该分量减少到零会引入更多的灰色并产生褪色效果。有时,饱和度表现为从0到1的范围,其中0是灰色,1是原色。
3. Value(OR Brightness):
Value(OR Brightness):亮度值与饱和度一起工作,描述颜色的亮度或强度,从0到100%,其中0是完全黑色的,100是最亮的,显示最多的颜色。
8.2 转HSV颜色空间
import cv2
im = cv2.imread("a.jpeg")
im1 = cv2.cvtColor(im, cv2.COLOR_BGR2HSV)
cv2.imshow("im", im1)
cv2.waitKey(0)
cv2.destroyAllWindows()
解释:cv2.cvtColor(图像,转换模式)
在 OpenCV 中,cv2.cvtColor
函数用于转换图像的颜色空间。常用的转换模式包括:
- BGR 到 RGB:
cv2.COLOR_BGR2RGB
- RGB 到 BGR:
cv2.COLOR_RGB2BGR
- BGR 到 灰度:
cv2.COLOR_BGR2GRAY
- 灰度 到 BGR:
cv2.COLOR_GRAY2BGR
- BGR 到 HSV:
cv2.COLOR_BGR2HSV
- HSV 到 BGR:
cv2.COLOR_HSV2BGR
8.3 HSV颜色范围
注意:OpenCV中HSV的色相范围为[0,179]
饱和度范围为[0,255]
亮度值范围为[0,255]
# 获取颜色在hsv范围
def get_limit(color):
# 对颜色进行标准化处理
c = np.uint8([[color]])
# 将BGR颜色空间转成HSV颜色空间
hsv = cv2.cvtColor(c, cv2.COLOR_BGR2HSV)
# 上限和下限
# hsv[0, 0] 表示图像中的第一个像素。
# hsv[0, 0, 0] 表示该像素的第一个通道(即色相通道)的值,取值范围是 0 到 179,用来表示颜色的种类。
# hsv[0, 0, 0](色相),hsv[0, 0, 1](饱和度),hsv[0, 0, 2](明度),
low = hsv[0, 0, 0] - 10, 100, 100
up = hsv[0, 0, 0] + 10, 255, 255
return np.uint8(low), np.uint8(up)
blue = [255, 0, 0]
low, up = get_limit(blue)
当描述一个颜色,例如蓝色:
表示blue的下限,色相为当前色相-10,饱和度为100,亮度为100
表示blue的上限,色相为当前色相+10,饱和度为255,亮度为255
注意:红色,因为红色是0到10是下限,159到180是上限