### 色彩空间的转换:cvtColor(img,colorspace)颜色转换的关键API:cv2.cvtColor()
import cv2
def callback(calue):
pass
cv2.namedWindow('color', cv2.WINDOW_NORMAL)
cv2.resizeWindow('color', 640, 480)
img = cv2.imread('./image.jpg')
## 定义颜色空间转化列表
color_spaces = [
#所有颜色空间的转化都是COLOR开头(A意思是透明度)
cv2.COLOR_BGR2RGBA, cv2.COLOR_BGR2BGRA,
cv2.COLOR_BGR2GRAY, cv2.COLOR_BGR2HSV,
cv2.COLOR_BGR2YUV
]
## 设置trackbar
cv2.createTrackbar('trackbar', 'color', 0, 4, callback)
while True:
# 获取trackbar的值
index = cv2.getTrackbarPos('trackbar','color')
# 进行颜色空间转换
cvt_img = cv2.cvtColor(img,color_spaces[index])
cv2.imshow('color', cvt_img)
# 如果下面一句只写cv2.waitKey(0),出来的结果图只会停留在第一帧,拖动trackbar会没有效果
key = cv2.waitKey(10)
if key == ord('q'):
break
cv2.destroyAllWindows()
注意在这个地方,不能直接写waitKey(0),必须加一个if判断条件,否则代码运行后只会停留在第一帧图上,拖动bar来调整颜色空间会没有效果
运行结果:
2.图像的深浅拷贝:
### mat的深浅拷贝:浅拷贝就是拷贝的数据随原始数据改变而改变,深拷贝就是完全复制原始数据(不管也不复制原始数据的改变)
import cv2
import numpy as np
img = cv2.imread('./image.jpg')
img = cv2.resize(img, None, fx = 0.5, fy = 0.5)
##浅拷贝
img2 = img.view()
##深拷贝
img3 = img.copy()
img[2:40, 2:40] = [0, 0, 255]
# np.hstack((1,2,3,....)):堆叠为一个数组。hstack为横向堆叠,vstack为竖向堆叠
cv2.imshow('img',np.hstack((img, img2, img3)))
# cv2.imshow('img',np.vstack((img, img2, img3)))
cv2.waitKey(0)
cv2.destroyAllWindows()
3.访问图像mat的属性
4.图像的分割与合并
import cv2
import numpy as np
img = np.zeros((200, 200,3), np.uint8)
# 分割通道
b, g, r = cv2.split(img)
# 在图片中做切片并修改切片部分颜色
b[10:100, 10:100] = 255
g[10:100, 10:100] = 255
# 合并通道
img2 = cv2.merge((b, g, r))
cv2.imshow('img', np.hstack((b, g)))
cv2.imshow('img2', np.hstack((img, img2)))
cv2.waitKey(0)
cv2.destroyAllWindows()
# print(img, shape)
*注意这里的括号不要漏掉或者将属性位置写错: