美文网首页
色彩空间转换

色彩空间转换

作者: Tsukinousag | 来源:发表于2021-10-01 22:14 被阅读0次

颜色空间的转换用到了如下约定:

  • 8位图像的范围是[0,255]
  • 16位图像的范围是[0,65535]
  • 浮点数图像值的范围是[0.0~1.0]

对于线性转换来说,这些取值范围是无关紧要的,但对于非线性转换来说,输入的RGB图像必须归一化到其相应的取值范围内

cv2.cvtColor() 

1.将RGB图像与灰度图像相互转换

img=np.random.randint(0,256,size=[256,256,3],dtype=np.uint8)
rst=cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
img=np.random.randint(0,256,size=[256,256],dtype=np.uint8)
rst=cv2.cvtColor(img,cv2.COLOR_GRAY2RGB)

将图像从BGR模式转为RGB模式

img=cv2.imread("D:/hjb.jpg",1)
rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)

从BGR空间到HSV空间的转换

#将蓝色,绿色,红色三种颜色分别进行转换,将他们从BGR色彩空间转换到HSV空间,并观察对应值

import cv2
import numpy as np

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)

映射后色调为120对应的是蓝色

blue:
 [[[255   0   0]]]
blueHSV:
 [[[120 255 255]]]

import cv2
import numpy as np

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)

映射后色调为60对应的是绿色

green:
 [[[  0 255   0]]]
greenHSV:
 [[[ 60 255 255]]]

import cv2
import numpy as np

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)



映射后色调对应的是0的是红色

red:
 [[[  0   0 255]]]
redHSV:
 [[[  0 255 255]]]

标记特定颜色

如何将图像特定颜色标记出来,即将一幅图像内的其他颜色屏蔽,仅仅将特定颜色显示出来

1.inRange函数显示特定值
dst=cv2.inRange(src,lowerb,upperb)
  • 1.如果src值处于该区间内,则dst中对应位置上的值为255
  • 2.如果src值不出与该指定区间内,则dst中对应位置上的值为0

将某个图像内的在[100,200]内的值标注出来

import cv2
import numpy as np

img=np.random.randint(0,256,size=[5,5],dtype=np.uint8)

dst=cv2.inRange(img,100,200)

print(dst)
[[  0 255 255   0   0]
 [  0 255   0   0 255]
 [  0 255   0 255   0]
 [  0   0 255   0   0]
 [  0 255 255 255   0]]
2.通过基于掩码的按位与显示ROI
import cv2
import numpy as np

img=np.ones((5,5),dtype=np.uint8)*9
mask=np.zeros((5,5),dtype=np.uint8)
mask[0:3,0]=1
mask[2:5,2:4]=1

roi=cv2.bitwise_and(img,img,mask=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]]
3.显示特定颜色值

在实际提取颜色时,提取一个颜色区间

  • 蓝色:[110,100,100]和[130,255,255]之间
  • 绿色:[50,100,100]和[70,255,255]之间
  • 红色:[0,100,100]和[10,255,255]之间
import cv2
import numpy as np

img=cv2.imread("D:/opencv.jpg")

dst=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

cv2.imshow("dst",dst)
cv2.imshow("img",img)

####指定蓝色区域
minblue=np.array([110,50,50])
maxblue=np.array([130,255,255])

#确定蓝色区域
mask=cv2.inRange(dst,minblue,maxblue)
blue=cv2.bitwise_and(dst,dst,mask=mask)

cv2.imshow("blue",blue)
####指定绿色区域
mingreen=np.array([50,50,50])
maxgreen=np.array([70,255,255])

mask=cv2.inRange(dst,mingreen,maxgreen)
green=cv2.bitwise_and(dst,dst,mask=mask)

cv2.imshow("green",green)
####指定红色区域
minred=np.array([0,50,50])
maxred=np.array([10,255,255])

mask=cv2.inRange(dst,minred,maxred)
red=cv2.bitwise_and(dst,dst,mask=mask)

cv2.imshow("red",red)

cv2.waitKey(0)
cv2.destroyWindow()

标记肤色

假定肤色范围划定为

  • 色调在[5,170]之间
  • 饱和度在[25,166]之间
import cv2
import numpy as np

img=cv2.imread("D:/renlian.jpg")
hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

cv2.imshow("img",img)
cv2.imshow("hsv",hsv)

h,s,v=cv2.split(hsv)

minh=5
maxh=170
hmask=cv2.inRange(h,minh,maxh)

mins=25
maxs=166
smask=cv2.inRange(s,mins,maxs)

#构建掩图
mask=hmask&smask

roi=cv2.bitwise_and(img,img,mask=mask)

cv2.imshow("ROI\n",roi)

cv2.waitKey(0)
cv2.destroyWindow()

改变HSV中的某一个值

调整HSV色彩空间内V通道的值,观察其处理结果

import cv2
import numpy as np

img=cv2.imread("D:/renlian.jpg")

cv2.imshow("img",img)

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("art",art)

cv2.waitKey(0)
cv2.destroyWindow()[图片上传中...(QQ截图20211001214453.png-5a66fa-1633095911679-0)]

alpha通道

在RGB色彩空间三个通道的基础上,还可以加上一个A通道,也叫alpha通道,表示透明度。四个通道的色彩空间被称为BGRA色彩空间(PNG)。alpha通道的赋值是[0,1]或者[0,255],表示透明到不透明

import cv2
import numpy as np

img=np.random.randint(0,256,size=[2,3,3],dtype=np.uint8)

print("img:\n",img)

bgra=cv2.cvtColor(img,cv2.COLOR_BGR2BGRA)

print("bgra:\n",bgra)

b,g,r,a=cv2.split(bgra)

print("a:\n",a)

a[:,:]=125

newbgra=cv2.merge([b,g,r,a])

print("newbgra:\n",newbgra)
img:
 [[[  1 101 227]
  [ 37  64 144]
  [ 66 178 104]]

 [[178  15 241]
  [ 74 233  82]
  [163  60  45]]]

bgra:
 [[[  1 101 227 255]
  [ 37  64 144 255]
  [ 66 178 104 255]]

 [[178  15 241 255]
  [ 74 233  82 255]
  [163  60  45 255]]]

a:
 [[255 255 255]
 [255 255 255]]

newbgra:
 [[[  1 101 227 125]
  [ 37  64 144 125]
  [ 66 178 104 125]]

 [[178  15 241 125]
  [ 74 233  82 125]
  [163  60  45 125]]]

对图像的alpha通道进行操作

import cv2
import numpy as np

img=cv2.imread("D:/renlian.jpg")
cv2.imshow("img",img)

bgra=cv2.cvtColor(img,cv2.COLOR_BGR2BGRA)
cv2.imshow("bgra",bgra)

b,g,r,a=cv2.split(bgra)

a[:,:]=125

bgra125=cv2.merge([b,g,r,a])
cv2.imshow("bgra125",bgra125)

a[:,:]=0

bgra0=cv2.merge([b,g,r,a])
cv2.imshow("bgra0",bgra0)

cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imwrite("D:/bgra.png",bgra)
cv2.imwrite("D:/bgra0.png",bgra0)
cv2.imwrite("D:/bgra125.png",bgra125)

实际打开png后的效果如下,a=0是纯色透明的


相关文章

  • 色彩空间转换

    颜色空间的转换用到了如下约定: 8位图像的范围是[0,255] 16位图像的范围是[0,65535] 浮点数图像值...

  • 色彩空间类型转换

    RGB是一种比较常见的色彩空间类型,除此之外还有一些其他的色彩空间,比如常见的包括GRAY色彩空间(灰度图像)、X...

  • 几何变换之缩放---OpenCV-Python开发指南(10)

    前言 对于色彩空间的转换,我们就通过HSV实战给大家讲解介绍。至于其他的色彩空间的转换与应用,后续学到其他知识在单...

  • 002 图像色彩空间转换

    RGB是设备无关的色彩空间,即在各种设备上都可以做到“所见即所得”。 安卓系统的raw data是YUV色彩空间的...

  • 009 图像色彩空间转换

    四种常见的色彩空间:RGB,HSV,YUV,YCrCb RGB是设备无关的、独立于设备的色彩空间; HSV对于直方...

  • OpenCV滤波器

    在计算机视觉中有三种常用的色彩空间:灰度、BGR、HSV灰度色彩空间是通过去除彩色信息来将其转换成灰阶,灰度色彩空...

  • opencv颜色空间转换

    Opencv中有数百种关于在不同色彩空间之间转换的方法。当前,在计算机视觉中有三种常见的色彩空间:灰度,BGR以及...

  • HSV色彩空间

    1. 色彩空间转换 import cv2 import numpy as np imgs = cv2.imread...

  • Opencv-Python学习笔记(二)

    OpenCV中有数百种在不同色彩空间之间转换的方法。如今,在计算机视觉中有三种常用的色彩空间:灰度、BGR以及HS...

  • 4.1色彩空间基础 未完TODO

    比较常见的色彩空间包括 GRAY 色彩空间、XYZ 色彩空间、 YCrCb 色彩空间、HSV色彩空间、HLS 色彩...

网友评论

      本文标题:色彩空间转换

      本文链接:https://www.haomeiwen.com/subject/forunltx.html