2020/08/02
RGB、HSV、HIS、YCrCb、YUV
def color_space_demo(image):
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) #最常见的BGR转换到灰度空间
cv.imshow("gray",gray)
hsv = cv.cvtColor(image,cv.COLOR_BGR2HSV) #BGR转换到HSV
cv.imshow("hsv",hsv)
yuv = cv.cvtColor(image,cv.COLOR_BGR2YUV) #BGR转换到YUV
cv.imshow("yuv",yuv)
Ycrcb = cv.cvtColor(image,cv.COLOR_BGR2YCrCb) #BGR转换到YCrCb
cv.imshow("Ycrcb",Ycrcb)
运行结果:
注意:
重要的常用的转换
★①HSV与RGB之间的转换
★②YUV和RGB之间的转换
H:0-180
S:0-255
V:0-255
三个参数;第一个参数是输入图像就是转换成的hsv图像,第二个参数是hsv的三个低值,第三个参数是hsv的三个高值
def extrace_object_demo(): #提取图像中有颜色的对象
capture = cv.VideoCapture("E") #读取视频文件
while(True):
ret,frame = capture.read() #返回,如果有就返回True,如果没有就返回False
if ret == False: #如果没有就结束程序
break
cv.imshow("video",frame) #显示视频
c = cv.waitKey(40)
if c == 27: #27就是esc退出
break
hsv = cv.cvtColor(frame,cv.COLOR_BGR2HSV)#将RBG转换为HSV
lower_hsv = np.array([37,43,46]) # 对照表的数值提取绿色;定义1行3列的数组存放低值
upper_hsv = np.array([77,255,255]) # 对照表的数值提取绿色;定义1行3列的数组存放高值
mask = cv.inRange(hsv,owerb=lower_hsv,upperb=upper_hsv)
cv.imshow("mask",mask)
def extrace_object_demo(): #提取图像中有颜色的对象
capture = cv.VideoCapture("E") #读取视频文件
while(True):
ret,frame = capture.read() #返回,如果有就返回True,如果没有就返回False
if ret == False: #如果没有就结束程序
break
hsv = cv.cvtColor(frame,cv.COLOR_BGR2HSV)#将RBG转换为HSV
lower_hsv = np.array([37,43,46]) # 对照表的数值提取绿色;定义1行3列的数组存放低值
upper_hsv = np.array([77,255,255]) # 对照表的数值提取绿色;定义1行3列的数组存放高值
mask = cv.inRange(hsv,owerb=lower_hsv,upperb=upper_hsv)
dst = cv.bitwise_and(frame,frame,mask=mask) #与或非和mask一起用,颜色对象可以很快的被提取出来
cv.imshow("video",frame) #显示视频
cv.imshow("mask",dst) #这里不显示mask了,显示dst
c = cv.waitKey(40)
if c == 27: #27就是exc退出
break
split(图片)将三通道图像分成三个通道显示
b,g,r = cv.split(src)
cv.imshow("blue",b)
cv.imshow("green",g)
cv.imshow("red",r)
src[:,:, 2]=0 #对某一个通道赋值;对最后一个通道赋值=0,就是去掉红色
merge(一个数组)将三通道图像合并起来
src = cv.merge([b,g,r])
cv.imshow("changed image",src)
要求两种图片大小一样
加、减、乘、除
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 multiply_demo(m1,m2): # 两个相乘
dst = cv.multiply(m1,m2)
cv.imshow("multiply_demo",dst)
def dicide_demo(m1,m2): # 两个相除(用的较少)
dst = cv.dicide(m1,m2)
cv.imshow("dicide_demo",dst)
def others(m1,m2): # 其他
AVG1 = cv.mean(m1) # m1的均值
AVG2 = cv.mean(m2) # m2的均值
VAR1 = cv.meanStdDev(m1) # m1的方差
VAR2 = cv.meanStdDev(m2) # m1的方差
print(AVG1)
print(AVG2)
print(VAR1)
print(VAR2)
均值和方差的应用
色彩空间应用:
调节亮度、调节对比度
0是最黑暗的
def contrast_brightness_demo(image, c, b): #
h, w, ch = image.shape
blank = np.zeros([h, w, ch],image.dtype) # 创建一个和它宽度和高度相同的空白的图像
dst = cv.addWeighted(image, c, blank, 1-c, b) # 参数依次是图像image,对比度c,空白的图像blank,1-c,b;
# 注意:只要在函数当中是None的在前面都可以接收
cv.imshow("contrast_brightness_demo", dst)
与、或、非
def logic_demo0(m1,m2): # 两个与运算
dst = cv.bitwise_and(m1,m2)
cv.imshow("logic_demo",dst)
def logic_demo1(m1,m2): # 两个图像或运算
dst = cv.bitwise_or(m1,m2)
cv.imshow("logic_demo",dst)
一张图像的每个像素按位取反
def logic_demo(m1): # 非运算不是对一组图而是对一张图像来说的;
# 和之前视频像素取反提高速度是一样的,就是每个像素按位取反
dst = cv.bitwise_not(m1)
cv.imshow("logic_demo",dst)
应用:
遮罩层控制