#色彩空间转换
importcv2 as cvdefcolor_space_demo(img):
gray= cv.cvtColor(img, cv.COLOR_BGR2GRAY) #RGB转换为GRAY 这里的GRAY是单通道的
cv.imshow("gray", gray)
hsv= cv.cvtColor(img, cv.COLOR_BGR2HSV) #RGB转换为HSV
cv.imshow("hsv", hsv)
yuv= cv.cvtColor(img, cv.COLOR_RGB2YUV) #RGB转换为YUV
cv.imshow("yuv",yuv)
Ycrcb= cv.cvtColor(img, cv.COLOR_RGB2YCrCb) #RGB转换为YCrCb
cv.imshow("Ycrcb", Ycrcb)
src= cv.imread('D:\imageload\example.png')
cv.namedWindow('first_image', cv.WINDOW_AUTOSIZE)
cv.imshow('first_image', src)
color_space_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()
运行结果:
1.RGB就是指Red,Green和Blue,一副图像由这三个channel(通道)构成
2.Gray就是只有灰度值一个channel。
3.HSV即Hue(色调),Saturation(饱和度)和Value(亮度)三个channel
切记(纯属个人理解):
1.百度百科说,将原来的RGB(R,G,B)中的R,G,B统一按照一种转换关系用Gray替换,形成新的颜色RGB(Gray,Gray,Gray),用它替换原来的RGB(R,G,B)就是灰度图。
2.opencv里,COLOR_RGB2GRAY是将三通道RGB对象转换为单通道的灰度对象。
3.将单通道灰度对象转换为 RGB 时,生成的RGB对象的每个通道的值是灰度对象的灰度值。
RGB是为了让机器更好的显示图像,对于人类来说并不直观,HSV更为贴近我们的认知,所以通常我们在针对某种颜色做提取时会转换到HSV颜色空间里面来处理.
1.HSV如下图:
2.opencv里HSV色彩空间范围为: H:0-180 S: 0-255 V: 0-255
3.常见的色彩空间有RGB、HSV、HIS、YCrCb、YUV,其中最常用的是RGB、HSV、YUV,其中YUV就是YCrCb(详见百度百科)。其中YUV的“Y”表示明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。
二、利用inrange函数过滤视频中的颜色,实现对特定颜色的追踪
代码如下:
#视频特定颜色追踪
importcv2 as cvimportnumpy as npdefextrace_object_demo():
capture=cv.VideoCapture("E:/imageload/video_example.mp4")whileTrue:
ret, frame=capture.read()if ret ==False:breakhsv= cv.cvtColor(frame, cv.COLOR_BGR2HSV) #色彩空间由RGB转换为HSV
lower_hsv = np.array([100, 43, 46]) #设置要过滤颜色的最小值
upper_hsv = np.array([124, 255, 255]) #设置要过滤颜色的最大值
mask = cv.inRange(hsv, lower_hsv, upper_hsv) #调节图像颜色信息(H)、饱和度(S)、亮度(V)区间,选择蓝色区域
cv.imshow("video",frame)
cv.imshow("mask", mask)
c= cv.waitKey(40)if c == 27: #按键Esc的ASCII码为27
breakextrace_object_demo()
cv.destroyAllWindows()
运行结果:
这里只放追踪蓝色部分的截图,仅供参考
1.Opencv的inRange函数:可实现二值化功能
函数原型:inRange(src,lowerb, upperb[, dst]) -> dst
函数的参数意义:第一个参数为原数组,可以为单通道,多通道。第二个参数为下界,第三个参数为上界
例如:mask = cv2.inRange(hsv, lower_blue, upper_blue)
第一个参数:hsv指的是原图(原始图像矩阵)
第二个参数:lower_blue指的是图像中低于这个lower_blue的值,图像值变为255
第三个参数:upper_blue指的是图像中高于这个upper_blue的值,图像值变为255 (255即代表黑色)
而在lower_blue~upper_blue之间的值变成0 (0代表白色)
即:Opencv的inRange函数可提取特定颜色,使特定颜色变为白色,其他颜色变为黑色,这样就实现了二值化功能
2.HSV颜色对应的RGB分量范围表如下:(这里是三通道的)
三、通道的分离、合并以及某个通道值的修改
代码如下:
#通道的分离与合并以及某个通道值的修改
importcv2 as cv
src=cv.imread('E:\imageload\example.png')
cv.namedWindow('first_image', cv.WINDOW_AUTOSIZE)
cv.imshow('first_image', src)#三通道分离形成单通道图片
b, g, r =cv.split(src)
cv.imshow("second_blue", b)
cv.imshow("second_green", g)
cv.imshow("second_red", r)#其中cv.imshow("second_red", r)可表示为r = cv2.split(src)[2]
#三个单通道合成一个三通道图片
src =cv.merge([b, g, r])
cv.imshow('changed_image', src)#修改多通道里的某个通道的值
src[:, :, 2] =0
cv.imshow('modify_image', src)
cv.waitKey(0)
cv.destroyAllWindows()
1.这里用到了opencv的split函数和merge函数,实现通道的分离和合并。
2.cv.split函数分离出的b、g、r是单通道图像
一、色彩空间的转换代码如下:#色彩空间转换importcv2 as cvdefcolor_space_demo(img):gray= cv.cvtColor(img, cv.COLOR_BGR2GRAY) #RGB转换为GRAY 这里的GRAY是单通道的cv.imshow("gray", gray)hsv= cv.cvtColor(img, cv.COLOR_BGR2HSV) #RG...
import cv2 as cv
def color_space_demo(img):
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) #
RGB
转
换为GRAY 这里的GRAY是单通道的
cv.imshow(gray, gray)
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV) #
RGB
转
换为HSV
cv.imshow(hsv, hsv)
yuv
= cv.cvtColor(img, cv.COLOR_
RGB
2
YUV
) #
RGB
转
换为
YUV
五种常见的图像滤波方式:线性滤波(方框滤波、均值滤波、高斯滤波);非线性滤波(中值滤波、双边滤波)。
图片来源于:https://blog.csdn.net/qq_27261889/article/details/80822270侵删
1.先人为的给图像加噪声,以便后续进行滤波处理。
#给图像加噪声
import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取图片
im = cv2.imread('D:\
python
b\wx020.jpg')
rows, cols, chn = im
图片
转
灰度cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)报错如下:
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.error:
OpenCV
(4.5.4) d:\a\
opencv
-
python
\
opencv
-
python
\
opencv
\modules\imgproc\src\color.simd_helpers.hpp:92: error: (-2:Unspecified error) in function '__cdecl
opencv
的cvtColor()函数,用于在图像中不同的
色彩
空间
进行
转
换(Converts an image from one color space to another),
色彩
模式决定了打印或显示的图片颜色。
函数原型:
CV_EXPORTS_W void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 );
cvtColor()函数用于实现图像的
色彩
空间
转
换,一般包括
四
个参数,
cvtColor(sr..
opencv
提供了cvtColor()函数,用于在图像中不同的
色彩
空间
进行
转
换,用于后续处理。在使用cvtColor之前首先需要了解下基本的图像
色彩
模式,
色彩
模式决定了打印或显示的图片颜色。
图像
色彩
模式
位图模式是图像中最基本的格式,图像只有黑色和白色像素,是
色彩
模式中占有
空间
最小的,同样也叫做黑白图,它包含的信息量最少,无法包含图像中的细节,相当于只有0或者1
一副彩色图如...
python
-
opencv
之
色彩
空间
,
RGB
2HSV
色彩
空间
转
换及应用一、
Python
-
opencv
中的
色彩
空间
二、为什么同样的图片用公式换了
色彩
空间
显示出来的完全不一样?三、cv2.inRange()函数
四
、 BGRA图像
一、
Python
-
opencv
中的
色彩
空间
在这里主要介绍
RGB
和HSV
色彩
空间
,这二者具体是什么这里不再详细介绍,其他回答都很详细。
这里要介绍一下二者的取值和关系:
在
Python
-
opencv
中,
RGB
图像三个通道的取值都是0~255,*而HSV中H取值为0-180,S和V取值都