opencv_day04

#使用cv2.cvtColor()的实例来观察色彩空间转换功能
#将BGR图像转换为灰度图像
import cv2
import numpy as np
img=np.random.randint(0,256,size=[2,4,3],dtype=np.uint8)
rst=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
print('img=\n',img)
print('rst=\n',rst)
print('像素点(1,0)直接计算得到的值=',img[1,0,0]*0.114+img[1,0,1]*0.587+img[1,0,2]*0.299)
print('像素点(1,0)使用公式cv2.cvtColor()转换值=',rst[1,0])

输出:
img=
[[[ 53 222 118]
[ 32 83 172]
[220 206 106]
[169 142 220]]

[[ 67 195 3]
[221 104 184]
[151 57 228]
[148 27 135]]]
rst=
[[172 104 178 168]
[123 141 119 73]]
像素点(1,0)直接计算得到的值= 123.0
像素点(1,0)使用公式cv2.cvtColor()转换值= 123

#将灰度图像转换为BGR图像
import cv2
import numpy as np
img=np.random.randint(0,256,size=[2,4],dtype=np.uint8)
rst=cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
print('img=\n',img)
print('rst=\n',rst)

输出:
img=
[[202 110 252 34]
[ 89 39 86 84]]
rst=
[[[202 202 202]
[110 110 110]
[252 252 252]
[ 34 34 34]]

[[ 89 89 89]
[ 39 39 39]
[ 86 86 86]
[ 84 84 84]]]

#将图像在RGB和BGR模式之间转换
import cv2
import numpy as np
img=np.random.randint(0,256,size=[2,4,3],dtype=np.uint8)
rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
bgr=cv2.cvtColor(rgb,cv2.COLOR_RGB2BGR)
print('img=\n',img)
print('rgb=\n',rgb)
print('bgr=\n',bgr)

输出:
img=
[[[121 142 45]
[240 17 129]
[161 64 112]
[ 65 114 0]]

[[ 1 196 226]
[189 58 126]
[203 61 78]
[147 107 144]]]
rgb=
[[[ 45 142 121]
[129 17 240]
[112 64 161]
[ 0 114 65]]

[[226 196 1]
[126 58 189]
[ 78 61 203]
[144 107 147]]]
bgr=
[[[121 142 45]
[240 17 129]
[161 64 112]
[ 65 114 0]]

[[ 1 196 226]
[189 58 126]
[203 61 78]
[147 107 144]]]

#使用函数cv2.cvtcolor()来处理图像类型的转换
#将图像在BGR模式和灰度图像之间转换
import cv2
iu=cv2.imread('./image/iu.jpeg')
gray=cv2.cvtColor(iu,cv2.COLOR_BGR2GRAY)
bgr=cv2.cvtColor(gray,cv2.COLOR_GRAY2BGR)#因为由灰度图像的转换3个通道值一样所以仍是灰度图像
#=============打印shape=================
print('iu.shape=',iu.shape)
print('gray.shape=',gray.shape)
print('bgr.shape=',bgr.shape)
#==============显示效果==================
cv2.imshow('iu',iu)
cv2.imshow('gray',gray)
cv2.imshow('bgr',bgr)
cv2.waitKey()
cv2.destroyAllWindows()

输出:
在这里插入图片描述

#将图像从BGR模式转换为RGB模式
import cv2
iu=cv2.imread('./image/iu.jpeg')
rgb=cv2.cvtColor(iu,cv2.COLOR_BGR2RGB)
cv2.imshow('iu',iu)
cv2.imshow('rgb',rgb)
cv2.waitKey()
cv2.destroyAllWindows()

输出:
在这里插入图片描述

#在opencv中,测试RGB色彩空间中不同颜色的值转换到HSV色彩空间后的对应值
import cv2
import numpy as np
#============测试一下Opencv中蓝色的HSV模式值==================
imgBlue=np.zeros([1,1,3],dtype=np.uint8)
imgBlue[0,0,0]=255
Blue=imgBlue
BlueHSV=cv2.cvtColor(Blue,cv2.COLOR_BGR2HSV)
print('Blue=\n',Blue)
print('BlueHSV=\n',BlueHSV)
#============测试一下Opencv中绿色的HSV模式值==================
imgGreen=np.zeros([1,1,3],dtype=np.uint8)
imgGreen[0,0,1]=255
Green=imgGreen
GreenHSV=cv2.cvtColor(Green,cv2.COLOR_BGR2HSV)
print('Green=\n',Green)
print('GreenHSV=\n',GreenHSV)
#============测试一下OpenCV中红色的HSV模式值=================
imgRed=np.zeros([1,1,3],dtype=np.uint8)
imgRed[0,0,2]=255
Red=imgRed
RedHSV=cv2.cvtColor(Red,cv2.COLOR_BGR2HSV)
print('Red=\n',Red)
print('RedHSV=\n',RedHSV)

输出:
Blue=
[[[255 0 0]]]
BlueHSV=
[[[120 255 255]]]
Green=
[[[ 0 255 0]]]
GreenHSV=
[[[ 60 255 255]]]
Red=
[[[ 0 0 255]]]
RedHSV=
[[[ 0 255 255]]]

#使用函数cv2.inRange()将某个图像内的在[100,200]内的值标注出来
import cv2
import numpy as np
img=np.random.randint(0,256,size=[5,5],dtype=np.uint8)
min=100
max=200
mask=cv2.inRange(img,min,max)
print('img=\n',img)
print('mask=\n',mask)

输出:
img=
[[9 9 9 9 9]
[9 9 9 9 9]
[9 9 9 9 9]
[9 9 9 9 9]
[9 9 9 9 9]]
mask=
[[1 0 0 0 0]
[1 0 0 0 0]
[1 0 1 1 0]
[0 0 1 1 0]
[0 0 1 1 0]]
roi=
[[9 0 0 0 0]
[9 0 0 0 0]
[9 0 9 9 0]
[0 0 9 9 0]
[0 0 9 9 0]]

#分别提取Opencv的logo图像内的红色,绿色,蓝色
#首先利用函数cv2.inRange()查找指定颜色区域,然后利用基于掩码的按位与运算将指定颜色提取出来
import cv2
import numpy as np
opencv=cv2.imread('./image/opencv.jpg')
hsv=cv2.cvtColor(opencv,cv2.COLOR_BGR2HSV)
cv2.imshow('opencv',opencv)
#===============指定蓝色值的范围=================
minBlue=np.array([110,50,50])
maxBlue=np.array([130,255,255])
#确定蓝色区域
mask=cv2.inRange(hsv,minBlue,maxBlue)
#通过掩码控制的按位与运算,锁定蓝色区域
blue=cv2.bitwise_and(opencv,opencv,mask=mask)
cv2.imshow('blue',blue)
#================指定绿色值的范围=================
minGreen=np.array([50,50,50])
maxGreen=np.array([70,255,255])
#确定绿色区域
mask=cv2.inRange(hsv,minGreen,maxGreen)
#通过掩码控制的按位与运算,锁定绿色区域
green=cv2.bitwise_and(opencv,opencv,mask=mask)
cv2.imshow('green',green)
#==============指定红色值的范围==================
minRed=np.array([0,50,50])
maxRed=np.array([30,255,255])
#确定红色区域
mask=cv2.inRange(hsv,minRed,maxRed)

输出:
在这里插入图片描述

#标记肤色,提取一幅图像内的肤色部分
import cv2
img=cv2.imread('./image/iu.jpeg')
hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
h,s,v=cv2.split(hsv)
minHue=5
maxHue=170
hueMask=cv2.inRange(h,minHue,maxHue)
minSat=25
maxSat=166
satMask=cv2.inRange(s,minSat,maxSat)
mask=hueMask & satMask
roi=cv2.bitwise_and(img,img,mask=mask)
cv2.imshow('img',img)
cv2.imshow('ROI',roi)
cv2.waitKey()
cv2.destroyAllWindows()

输出:
在这里插入图片描述

#调整HSV色彩空间内V通道的值,观察其处理结果
import cv2
img=cv2.imread('./image/iu.jpeg')
hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
h,s,v=cv2.split(hsv)
v[:,:]=255
newHSV=cv2.merge([h,s,v])
art=cv2.cvtColor(newHSV,cv2.COLOR_HSV2BGR)
cv2.imshow('img',img)
cv2.imshow('art',art)
cv2.waitKey()
cv2.destroyAllWindows()

输出:
在这里插入图片描述

#编写一个程序,对图像的alpha通道进行处理
import cv2
img=cv2.imread('./image/iu.jpeg')
bgra=cv2.cvtColor(img,cv2.COLOR_BGR2BGRA)
b,g,r,a=cv2.split(bgra)
a[:,:]=125
bgra125=cv2.merge([b,g,r,a])
a[:,:]=0
bgra0=cv2.merge([b,g,r,a])
cv2.imshow('img',img)
cv2.imshow('bgra',bgra)
cv2.imshow('bgra125',bgra125)
cv2.imshow('bgra0',bgra0)
cv2.waitKey()
cv2.destroyAllWindows()
cv2.imwrite('bgra.png',bgra)
cv2.imwrite('bgra125.png',bgra125)
cv2.imwrite('bgra0.png',bgra0)

输出:
在这里插入图片描述

#编写一个程序,对图像的alpha通道进行处理
import cv2
img=cv2.imread('./image/iu.jpeg')
bgra=cv2.cvtColor(img,cv2.COLOR_BGR2BGRA)
b,g,r,a=cv2.split(bgra)
a[:,:]=125
bgra125=cv2.merge([b,g,r,a])
a[:,:]=0
bgra0=cv2.merge([b,g,r,a])
cv2.imshow('img',img)
cv2.imshow('bgra',bgra)
cv2.imshow('bgra125',bgra125)
cv2.imshow('bgra0',bgra0)
cv2.waitKey()
cv2.destroyAllWindows()
cv2.imwrite('bgra.png',bgra)
cv2.imwrite('bgra125.png',bgra125)
cv2.imwrite('bgra0.png',bgra0)

输出:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值