颜色缩减方法:如果矩阵元素存储的是单通道像素,使用C或C++的无符号字符类型,那么像素可有256个不同值。但若是三通道图像,这种存储格式的颜色数就太多了(确切地说,有一千六百多万种)。用如此之多的颜色可能会对我们的算法性能造成严重影响。其实有时候,仅用这些颜色的一小部分,就足以达到同样效果。所以其做法是:将现有颜色空间值除以某个输入值,以获得较少的颜色数。
利用查找表,我们可以提前计算出结果,保存起来,运用的时候依靠一一映射,节约大量时间。
用途:
色彩匹配
伪色彩化
LUT的各种风格
COLORMAP_AUTUMN = 0
COLORMAP_BONE = 1
COLORMAP_COOL = 8
COLORMAP_HOT = 11
COLORMAP_HSV = 9
COLORMAP_JET = 2
COLORMAP_OCEAN = 5
COLORMAP_PARULA = 12
COLORMAP_PINK = 10
COLORMAP_RAINBOW = 4
COLORMAP_SPRING = 7
COLORMAP_SUMMER = 6
COLORMAP_WINTER = 3
src=cv.imread("D:/lena.jpg")
cv.namedWindow("input",cv.WINDOW_AUTOSIZE)
gray=cv.cvtColor(src,cv.COLOR_BGR2GRAY)
cv.imshow("input",gray)
cv.imwrite("D:/gray.jpg",gray)
dst=cv.applyColorMap(gray,cv.COLORMAP_SPRING)#输入的为灰度图像
cv.imshow("dst",dst)
cv.waitKey(0)
cv.destroyAllWindows()
OpenCV中默认imread函数加载图像文件,加载进来的是三通道彩色图像,色彩空间是RGB色彩空间、通道顺序是BGR(蓝色、绿色、红色)、对于三通道的图像OpenCV中提供了两个API函数用以实现通道分离与合并。
在计算各通道的直方图、均值和方差时会用到通道的分离与合并
import cv2 as cv
src=cv.imread("D:/lena.jpg")
cv.namedWindow("input",cv.WINDOW_AUTOSIZE)
cv.imshow("input",src)
#蓝色通道为零
mv=cv.split(src)
mv[0][:,:]=0
dst1=cv.merge(mv)
cv.imshow("output1",dst1)
#绿色通道为零
mv=cv.split(src)
mv[1][:,:]=0
dst2=cv.merge(mv)
cv.imshow("output2",dst2)
#红色通道为零
mv=cv.split(src)
mv[2][:,:]=0
dst3=cv.merge(mv)
cv.imshow("output3",dst3)
cv.mixChannels(src,dst3,[2,0])
cv.imshow("output4",dst3)
cv.waitKey(0)
cv.destroyAllWindows()
RGB色彩空间 独立于设备的色彩空间 图像的处理
HSV色彩空间 对于直方图的处理,
YUV色彩空间 跟设备有关,手机相机rawdata文件
YCrCb色彩空间 做皮肤检测效果好
相关API
cvtColor() 色彩转换
inRange() 提取指定色彩区域
src2=cv.imread("D:/WindowsLogo.jpg")
cv.imshow("src2",src2)
hsv=cv.cvtColor(src2,cv.COLOR_BGR2HSV)
mask=cv.inRange(hsv,(35,43,46),(77,255,255))#根据上图查表知,提取的颜色为绿色
dst1=cv.bitwise_and(src2,src2,mask=mask)#白色为所选区的部分
dst2=cv.bitwise_not(src2,mask=mask)#绿色取反为偏紫色
cv.imshow("mask",mask)
cv.imshow("dst1",dst1)
cv.imshow("dst2",dst2)
最小min
最大max
均值mean
标准方差standard deviation
相关API
minMaxLoc()计算最大最小值
meanStdDev()计算均值与标准方差
min,max,minLoc,maxLoc = cv.minMaxLoc(src)#最小、最大像素值以及它们的位置
means,stddev = cv.meanStdDev(src)#均值和标准方差
#转二值图像的一种方法
src[np.where(src<means)]=0
src[np.where(src>means)]=255
cv.imshow("binary",src)