不多哔哔了(也哔不出什么话暖场),直接开始吧。
#创建三原色的TrackBar
import cv2
import numpy as np
#创建窗口
cv2.namedWindow('trackbar', cv2.WINDOW_NORMAL)
cv2.resizeWindow('mouse', 640, 480)
#定义回调函数
def callback(value):
pass
#创建trackbar
cv2.createTrackbar('R', 'trackbar', 0, 255, callback)
cv2.createTrackbar('G', 'trackbar', 0, 255, callback)
cv2.createTrackbar('B', 'trackbar', 0, 255, callback)
#创建一个纯黑背景图片,高度,宽度(与之前相反)
img = np.zeros((480, 640, 3), np.uint8)
while True:
#获取当前trackbar值
r = cv2.getTrackbarPos('R', 'trackbar')
g = cv2.getTrackbarPos('G', 'trackbar')
b = cv2.getTrackbarPos('B', 'trackbar')
#改变背景图颜色,取出第三个维度值,进行颜色通道替换
img[:] = [b, g, r]
cv2.imshow('trackbar', img)
key = cv2.waitKey(1)
if key == ord('q')
break
cv2.destroyAllWindows()
最常见的色彩空间就是RGB,人眼也是基于RGB色彩空间分辨颜色。
OpenCV默认使用的是BGR,区别在于图片在色彩通道上的排序不同。
HSL在顶部是纯白的,不管是什么颜色。
与HSV的区别:
是一种颜色编码的方式,常使用在各个视频处理组件中。YUV在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽。
YUV最大的有点在于只需占用极少的带宽。
import cv2
def callback(value):
pass
cv2.namedWindow('color', cv2.WINDOW_NORMAL)
cv2.resizeWindow('color', 640,480)
img = cv2.imread('./img.jpg')
#常见的颜色空间转换,A为透明度,2 == to
color_spaces = [cv2.COLOR_BGR2RGBA, cv2.COLOR_BGR2BGRA, cv2.COLOR_BGR2GRAY, cv2.COLOR_BGR2HSV, cv2.COLOR_BGR2YUV]
cv2.createTrackbar('curcolor', 'color', 0, 4, callback)
while True:
index = cv2.getTrackbarPos('curcolor', 'color')
cvt_img = cv2.cvtColor(img, color_spaces[index])
cv2.imshow('color', cvt_img)
key = cv2.waitKey(10)
if key == ord('q'):
break
cv2.destroyAllWindows()
Mat是OpenCV在C++语言中用来表示图像数据的一种数据结构。在Python中转化为numpy的ndarray。
import cv2
import numpy as np
img = cv2.imread('./img.jpg')
#浅拷贝
img2 = img.view()
#深拷贝
img3 = img.copy()
#该数据为了体现深浅拷贝的区别,改成红色
img[10:100, 10:100] = [0, 0, 255]
#cv2.imshow('img', img)
#cv2.imshow('img2', img2)
#cv2.imshow('img3', img3)
#一起显示,横向排版
cv2.imshow('img', np.hstack((img, img2, img3)))
cv2.waitKey(0)
cv2.destroyAllWindows()
#图像的分割与融合
import cv2
import numpy as np
img = np.zeros((480, 640, 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((img, img2)))
cv2.waitKey(0)
cv2.destroyAllWindows()
颜色空间部分暂时告一段落吧。