色彩空间是定义的颜色范围,即计算机存储色彩的数据结构。知名的色彩空间有 sRGB、AdobeRGB 和 ProPhotoRGB。
常见的色彩空间有 RGB、HSV、YUV等。
如上图所示的是一个HSV的色彩空间:S与V是0-255,H是0-180(在opencv中是0-180,原本是可以0-360的,只是为了8位存储,被归一化到0-180而已),色彩分布如下表所示,如果需要不同颜色时,按HSV进行填写:
YCrCb:常见用于人类皮肤的色彩数据
YUV:Linux中默认的存储图片的色彩空间为YUV
最常见的转换有两个:RGB<-->HSV, RGB<-->YUV
import cv2 as cv
import numpy as np
def extrace_object_demo(): #函数将视频中绿色的部分过滤出来,使用cv.inRange()函数
capture = cv.VideoCapture("C:\\0-MyWork\\03、Python版OpenCV3计算机图像视觉视频教程\\01概述与环境搭建.mp4")
while(True):
ret, frame = capture.read()
if ret == False:
break;
hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
lower_hsv = np.array([35, 43, 46]) #查看上述表中绿色的HSV低值
upper_hsv = np.array([77, 255, 255]) #查看上述表中绿色的HSV高值
mask = cv.inRange(hsv, lowerb=lower_hsv, upperb=upper_hsv)
dst = cv.bitwise_and(frame, frame, mask=mask) #对比原图和掩模进行位运算,bitwise_not代表取反(即255-原值)
cv.imshow("video", frame)
cv.imshow("mask", dst)
c = cv.waitKey(40) #cvWaitKey()函数的功能是不断刷新图像,频率时间为delay,单位为ms。如果使用cvWaitKey(0)则只会显示第一帧视频。
# 当delay<=0的时,如果没有键盘触发,则一直等待。返回值,为键盘按下的码字;
if c == 27:
break
def color_space_demo(image): #转化图片的色彩空间
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
cv.imshow("gray", gray)
hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)
cv.imshow("hsv", hsv)
yuv = cv.cvtColor(image, cv.COLOR_BGR2YUV)
cv.imshow("yuv", yuv)
Ycrcb = cv.cvtColor(image, cv.COLOR_BGR2YCrCb)
cv.imshow("ycrcb", Ycrcb)
def spMergeFig(src):
b, g, r = cv.split(src) #通道分离
cv.imshow("blue", b)
cv.imshow("green", g)
cv.imshow("red", r)
src = cv.merge([b, g, r]) #也可以合并3个通道
src[:, :, 0] = 0 #实验将第一个通道赋为0
cv.imshow("changed image", src)
print("---------OPENCV 图像处理---------")
src = cv.imread("C:\\1-WorkSoftware\\pythonCode\\python-opencv_tutorial_codes\\opencv-python\\zly.jpeg")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
color_space_demo(src)
extrace_object_demo()
spMergeFig(src)
cv.waitKey(0)
cv.destroyAllWindows()
以下仅为部分图片(视频部分运行结果已经去掉):
这里对图片的三个通道 进行:
1)+-*/四项进算;
2)逻辑运算、求平均值与方差;
3)对比度(即将像素之间的差异扩大化)与亮度(所有像素三通道全部加1个值,即变白了)进行运算。
测试代码如下:
import cv2 as cv
import numpy as np
def add_demo(m1, m2): #像素点相加,图像大小要一样
dst = cv.add(m1, m2)
cv.imshow("add_demo", dst)
def subtract_demo(m1, m2): #像素点相减,图像大小要一样
dst = cv.subtract(m1, m2)
cv.imshow("subtract_demo", dst)
def divide_demo(m1, m2): #像素点相除,图像大小要一样
dst = cv.divide(m1, m2)
cv.imshow("divide_demo", dst)
def multiply_demo(m1, m2):
dst = cv.multiply(m1, m2)
cv.imshow("multiply_demo", dst)
def logic_demo(m1, m2): #图片的逻辑运算
#dst = cv.bitwise_and(m1, m2)
dst1 = cv.bitwise_or(m1, m2)
image = cv.imread("C:/1-WorkSoftware/pythonCode/images/linuxLogo.png")
#cv.imshow("image1", image)
dst2 = cv.bitwise_not(image)
cv.imshow("logic_demo_bitwise_or", dst1)
cv.imshow("logic_demo_bitwise_not", dst2)
def contrast_brightness_demo(image, c, b): #调整图像的亮度与对比度,本函数中c代表对比度,b代表亮度
h, w, ch = image.shape
blank = np.zeros([h, w, ch], image.dtype)
dst = cv.addWeighted(image, c, blank, 1-c, b)
cv.imshow("con-bri-demo", dst)
def others(m1, m2): #用于计算图片三通道的均值与方差,并打印之
M1, dev1 = cv.meanStdDev(m1) #M取图片三个通道的均值,dev取三通道的方差
M2, dev2 = cv.meanStdDev(m2)
h, w = m1.shape[:2] #只取图像的高、宽,不取通道
print(M1) #[[37.24318885][37.09336945][36.66354489]]
print(M2) #[[126.14718782][ 96.75828173][ 42.0252838 ]]
print(dev1) #[[48.82160712] [48.72778769] [48.18074718]]
print(dev2) #[[67.57171883] [32.13257429] [50.82122017]]
img = np.zeros([h, w ,3], np.uint8) #新建一张纯黑色的图片,用于测试均值 与方差
m, dev = cv.meanStdDev(img) #函数取值如上所示
print(m) #[[0.] [0.] [0.]]
print(dev) #[[0.] [0.] [0.]]
print("--------- Hello Python ---------")
src1 = cv.imread("C:/1-WorkSoftware/pythonCode/images/linuxLogo.png")
src2 = cv.imread("C:/1-WorkSoftware/pythonCode/images/windowsLogo.png")
print(src1.shape) #打印结果(170, 228, 3)
print(src2.shape) #打印结果(170, 228, 3)
cv.namedWindow("image1", cv.WINDOW_AUTOSIZE)
cv.imshow("image1", src1)
cv.imshow("image2", src2)
add_demo(src1, src2)
subtract_demo(src1, src2)
divide_demo(src1, src2) #基本上一除之后,值 很小,会变成偏黑
multiply_demo(src1, src2) #相乘之后比较大,
others(src1, src2)
logic_demo(src1, src2)
contrast_brightness_demo(src2, 1.5, 50) #表示对比亮扩大1.5倍,亮度加50
cv.waitKey(0)
cv.destroyAllWindows()
执行以上代码,运算结果如下所示。
说明:本无法博文及后续本专栏文章代码与测试文件下载地址为:
链接:https://pan.baidu.com/s/1BeZkXoCAn_AFRkyXcI8dMQ
提取码:aze2