图像的类型转换

1.1 BGR转换成GRAY

cv2.cvtColor(a,cv2.COLOR_BGR2GRAY)

import cv2
a=cv2.imread("..\\image\\lenacolor.png")
b=cv2.cvtColor(a,cv2.COLOR_BGR2GRAY)
cv2.imshow("lenaColor",a)
cv2.imshow("lenaGray",b)
print(f"a:{a.shape}")
print(f"b:{b.shape}")
cv2.waitKey()
cv2.destroyAllWindows()
 

1.2 BGR转换成RGB

cv2.cvtColor(a,cv2.COLOR_BGR2RGB)

#方式一:使用cv2.show()函数输出
import cv2
import matplotlib.pyplot as plt
a=cv2.imread("..\\image\\lenacolor.png")
b=cv2.cvtColor(a,cv2.COLOR_BGR2RGB)
cv2.imshow("BGR",a)
cv2.imshow("RGB",b)
cv2.waitKey()
cv2.destroyAllWindows()

#方式二:使用plt.imshow()函数输出,可以规定矩阵同时输出多张图像
# import cv2
# import matplotlib.pyplot as plt
# a=cv2.imread("..\\image\\lenacolor.png")
# b=cv2.cvtColor(a,cv2.COLOR_BGR2RGB)
# plt.subplot(121),plt.imshow(a),plt.axis('off')
# plt.subplot(122),plt.imshow(b),plt.axis('off')
# plt.show()

使用cv2.imshow() 函数输出的图像

使用matplotlib.pyplot.imshow()输出的图像

1.3 GRAY转换成BGR

cv2.cvtColor(a,cv2.COLOR_GRAY2BGR)

import cv2
a=cv2.imread("..\\image\\lena256.bmp",cv2.IMREAD_UNCHANGED)
b=cv2.cvtColor(a,cv2.COLOR_GRAY2BGR)
cv2.imshow("GRAY",a)
cv2.imshow("BGR",b)
print(a.shape)      #证明a是GRAY
print(b.shape)      #证明b是BGR
cv2.waitKey()
cv2.destroyAllWindows()

输出:

(256, 256)
(256, 256, 3) 

 

将灰度图转换成BGR图后将三个通道全部获取,发现一样

import cv2
a=cv2.imread("..\\image\\lena256.bmp",cv2.IMREAD_UNCHANGED)
b=cv2.cvtColor(a,cv2.COLOR_GRAY2BGR)
bb,bg,br=cv2.split(b)
cv2.imshow("bb",bb)
cv2.imshow("bg",bg)
cv2.imshow("br",br)
print(bb.shape,bg.shape,br.shape)           #三个图像一模一样
cv2.waitKey()
cv2.destroyAllWindows()
 

1.4 根据颜色追踪静态物体

【利用掩膜(mask)进行“与”操作】

即掩膜图像白色区域是对需要处理图像像素的保留,黑色区域是对需要处理图像像素的剔除 其余按位操作原理类似只是效果不同而已。 mask = cv2.inRange(img_HSV,lower_blue,upper_blue)

第一个参数:hsv指的是原图(hsv类型的图)

第二个参数:lower_red指的是图像中低于这个lower_red的值,图像值变为0

第三个参数:upper_red指的是图像中高于这个upper

import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('E:\\Image\\csdnImage\\find_blue.png',cv2.IMREAD_UNCHANGED)
# 转换到 HSV
img_HSV = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
# 设定蓝色的阈值
lower_blue = np.array([110,50,50])
upper_blue = np.array([130,255,255])
# 根据阈值构建掩模
mask = cv2.inRange(img_HSV,lower_blue,upper_blue)     #lower20===>0,upper200==>0,lower~upper==>255
print(lower_blue,upper_blue)
#对原图像和掩模进行位运算
res = cv2.bitwise_and(img,img,mask=mask)

cv2.imshow('img',img)
cv2.imshow('mask',mask)
cv2.imshow('res',res)
cv2.waitKey()
cv2.destroyAllWindows()

补充

# 如何准确找到某个颜色的阈值呢?
# 现在你可以分别用 [H-100,100,100] 和 [H+100,255,255] 做上下阈值。
# 除了这个方法之外,你可以使用任何其他图像编辑软件(例如 GIMP)
# 或者在线转换软件找到相应的HSV值,但是最后别忘了调节HSV的范围。
import cv2
import numpy as np
import matplotlib.pyplot as plt
green=np.uint8([[[255,0,0]]])
hsv_green=cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
print(hsv_green)
# 输出:[[[120 255 255]]]
# [H-10,100,100] 和 [H+10,255,255]得到阈值如下:
# [110 100 100] 和 [130 255 255]

1.5 追踪各种颜色静态物体

利用mask进行“与”操作

def getHsv(data):
    blue_hsv = cv2.cvtColor(data, cv2.COLOR_BGR2HSV)
    print(data,blue_hsv)
    return blue_hsv

import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('opencv.png',cv2.IMREAD_UNCHANGED)
img_hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
#得到蓝色部分
blue = np.uint8([[[255,0,0]]])
first = getHsv(blue)[0][0][0]
print(first)
lowerb=np.array([first-10,100,100])
upperb=np.array([first+10,255,255])
mask = cv2.inRange(img_hsv,lowerb,upperb)
res1 = cv2.bitwise_and(img,img,mask=mask)
#得到绿色部分
green = np.uint8([[[0,255,0]]])
first = getHsv(green)[0][0][0]
print(first)
lowerb=np.array([first-10,100,100])
upperb=np.array([first+10,255,255])
mask = cv2.inRange(img_hsv,lowerb,upperb)
res2 = cv2.bitwise_and(img,img,mask=mask)
#得到红色部分
red = np.uint8([[[0,0,255]]])
first = getHsv(red)[0][0][0]
print(first)
lowerb=np.array([first-10,100,100])
upperb=np.array([first+10,255,255])
mask = cv2.inRange(img_hsv,lowerb,upperb)
res3 = cv2.bitwise_and(img,img,mask=mask)

cv2.imshow('res1',res1)
cv2.imshow('res2',res2)
cv2.imshow('res3',res3)
#将三种单独的颜色组合在一起
t = cv2.addWeighted(res1,0.5,res2,0.5,0)
result = cv2.addWeighted(t,0.5,res3,0.5,0)
cv2.imshow('result',result)
cv2.waitKey()
cv2.destroyAllWindows()
# blue:[[[120 255 255]]]
# green:[[[60 255 255]]]
# res:[[[0 255 255]]]

 

 

 

 

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值