龙空技术网

Python——OpenCV库学习笔记

程序员牧童 627

前言:

而今你们对“pythonhsv转rgb语法”都比较关心,咱们都需要剖析一些“pythonhsv转rgb语法”的相关文章。那么小编在网摘上网罗了一些有关“pythonhsv转rgb语法””的相关知识,希望朋友们能喜欢,大家一起来了解一下吧!

1. shape函数的返回值

import cv2 as cvdef get_image_info(image):    print(image.shape)    height = image.shape[0]    width = image.shape[1]    channels = image.shape[2]    print("宽度:%d,高度:%d,通道:%d" % (width, height, channels))img = cv.imread("01.jpg")get_image_info(img)
(640, 640, 3)宽度:640,高度:640,通道:3
2. 像素值取反方法

(1)每一个像素取反

该方法是一个一个像素值进行修改,会很慢!

import cv2 as cvdef access_pexels(image):    height = image.shape[0]    width = image.shape[1]    channels = image.shape[2]    for row in range(width):        for col in range(height):            for c in range(channels):                pv = image[row, col, c]                image[row, col, c] = 255 - pv;    cv.imshow("image", image)img = cv.imread("01.jpg")cv.imshow("image_", img)access_pexels(img)cv.waitKey(0)cv.destroyAllWindows();

(2)bitwise_not接口

这个函数会比上一个方法运行得更快!

import cv2 as cvdef func(image):    cv.imshow("image", image)    image_ = cv.bitwise_not(image)    cv.imshow("image_", image_)image = cv.imread("01.jpg")func(image)cv.waitKey(0)cv.destroyAllWindows()
3. getTickCount函数和getTickFrequency函数计算函数运行时间
cv.getTickCount()cv.getTickFrequency()
getTickCount获取从操作系统启动到调用该函数的地方所经历的计时周期数,可以理解为次数getTickFrequency获取CPU的频率,单位:次/秒所以:(次数2 - 次数1)/ 频率 = 秒

样例

import cv2 as cvdef access_pexels(image):    height = image.shape[0]    width = image.shape[1]    channels = image.shape[2]    for row in range(width):        for col in range(height):            for c in range(channels):                pv = image[row, col, c]                image[row, col, c] = 255 - pv;img = cv.imread("01.jpg")t1 = cv.getTickCount();access_pexels(img)t2 = cv.getTickCount();running_time = 1000 * (t2 - t1) / cv.getTickFrequency()print('running time: %s (ms)' % running_time)
running time: 2526.2581 (ms)
4. NumPy模块中zeros函数和ones函数详解
import numpydef zeros(shape, dtype=None, order='C')	# 将值全部初始化为 0def ones(shape, dtype=None, order='C')  # 将值全部初始化为 1,还可进行乘积运算,修改成不同的值
shape表示数组的类型,可以是一维、二维、三维的dtype表示其中数据的类型,默认为float64(64位的float类型),也可以指定为np.uint8(无符号8位整型,数据范围在0~255,正好适合表示图片的像素值)order表示在内存中存储多维数组的风格,默认为’C’(以行为主顺序),也可以填 ‘F’ (以列为主顺序)
import numpy as npimport cv2 as cvdef create_image():    img = np.zeros([300,300,3], np.uint8)   # 创建一个400*400的3通道的图片,dtype为np.uint8    cv.imshow("img", img)    img[:, :, 0] = np.ones([300, 300]) * 255	# 将0号通道的值变成255    cv.imshow("img_", img)create_image()cv.waitKey(0)cv.destroyAllWindows();

代码中使用zero函数创建了一个三维数组,使用这个数组表示图片,其中图片大小为300 * 300,有3个通道,由于数组中的默认值为0,所以创建出来的图片是黑色

通过ones函数修改某通道的值,以达到修改像素值,使图片颜色改变

代码中将0号通道值全部变为255,所以每一个像素点的值都是(0,0,255),所以显示出来是蓝色

图解zero函数和ones函数在上述代码中的作用

单通道样例

import numpy as npimport cv2 as cvdef create_image():    img = np.zeros([300,300,1], np.uint8)    cv.imshow("img", img)    img[:, :, 0] = np.ones([300, 300]) * 127    cv.imshow("img_", img) create_image()cv.waitKey(0)cv.destroyAllWindows();

由于只有一个通道,这个通道的值的取值为[0,255],若是0则代表黑色,若是255则代表白色,中间的是灰色

5. NumPy模块中常用方法

(1)reshape方法和fill方法

import numpyarray1 = numpy.zeros([3, 3], numpy.uint8) # 创建一个3 * 3的二维数组,其中数据类型为8位的无符号整型,print(array1)array2 = array1.reshape([1, 9]) # 该函数可以将原有的数据个数(9个),变成其他维度的,数据的个数不能改变哦!print(array2)array2.fill(256) # 将数组中填入某个值,如果这个值 大于该类型的最大值,会出现高位截断print(array2)
[[0 0 0] [0 0 0] [0 0 0]][[0 0 0 0 0 0 0 0 0]][[0 0 0 0 0 0 0 0 0]]

(2)array方法

import numpyone_dimension = numpy.array([1,2,3], numpy.int32)	# 创建一维数组two_dimensions = numpy.array([[1,2,3],[4,5,6]], numpy.int32)	# 创建二维数组three_dimensions = numpy.array([[1,2,3],[4,5,6],[7,8,9]], numpy.int32)	# 创建三维数组print(one_dimension)print(two_dimensions)print(three_dimensions)
[1 2 3][[1 2 3] [4 5 6]][[1 2 3] [4 5 6] [7 8 9]]
6. 色彩空间6.1 色彩空间的概念颜色空间通常用三个相对独立的属性来描述,三个独立的变量综合作用,自然构成一个空间坐标,这就是颜色空间(颜色模型)。颜色可以由不同的角度,用三个不同属性加以描述,就产生了不同的颜色空间。但被描述的颜色对象本身是客观的,不同颜色空间只是从不同的角度去衡量同一个对象6.2 常见的色彩空间

(1) RGB

电脑成像利用了图像的三原色的原理。RGB颜色模型即代表了红绿蓝三原色,每种颜色利用两位十六进制数(八位二进制数)表示该颜色的强度。其中在颜色通道大小为0时色强最弱,大小为255时色强最强。由于在所有图像通道都为0时图像呈白色,所有图像通道值为255时图像呈黑色,所以RGB图像也被称为灰度图像。

RGB 色彩空间模型示意图RGB 色彩空间 彩色图

(2) HSV

HSV颜色模型,通过色调(H)饱和度(S)明度(V)来表现。色调H由角度表示,取值为0-360°。从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°。饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)

(3) HIS

HIS色彩空间模型示意图

(4)YUV (YCrCb)

在YUV颜色模型中,“Y”表示明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。“亮度”是透过RGB输入信号来建立的,方法是将RGB信号的特定部分叠加到一起。“色度”则定义了颜色的两个方面─色调与饱和度,分别用Cr和Cb来表示。其中,Cr反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。而Cb反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异。

YUV颜色模型解决了彩色图像和黑白图像的兼容问题,如果只有Y信号而没有U和V信号,那么一幅彩色图像就可以背转换为黑白图像。

YUV颜色模型可以和RGB颜色模型相互转换。公式如下:

Y = 0.299R + 0.587G + 0.114B

U = -0.147R - 0.289G + 0.436B

V = 0.615R - 0.515G - 0.100B

6.3 不同的色彩空间之间的相互转换

def cvtColor(src, code, dst=None, dstCn=None)
src代表需要转换的图像code代表颜色映射码6.3.1 HSV与RGB相互转换

颜色映射码(HSV < - - > RGB):COLOR_RGB2HSV 、 COLOR_HSV2RGB

import cv2 as cvdef color_space_change(image):    RGB2HSV_img = cv.cvtColor(image, cv.COLOR_RGB2HSV)    cv.imshow("RGB2HSV_img", RGB2HSV_img)    HSV2RGB_img = cv.cvtColor(RGB2HSV_img, cv.COLOR_HSV2RGB)    cv.imshow("HSV2RGB_img", HSV2RGB_img)img = cv.imread("01.jpg")color_space_change(img)cv.waitKey(0)cv.destroyAllWindows()
6.3.2 YUV与RGB相互转换

颜色映射码(YUV < - - > RGB):COLOR_RGB2YUV 、COLOR_YUV2RGB

import cv2 as cvdef color_space_change(image):    RGB2YUV_img = cv.cvtColor(image, cv.COLOR_RGB2YUV)    cv.imshow("RGB2YUV_img", RGB2YUV_img)        YUV2RGB_img = cv.cvtColor(RGB2YUV_img, cv.COLOR_YUV2RGB)    cv.imshow("YUV2RGB_img", YUV2RGB_img)img = cv.imread("01.jpg")color_space_change(img)cv.waitKey(0)cv.destroyAllWindows()

感谢阅读!!!

多说一句,很多人学Python过程中会遇到各种烦恼问题,没有人解答容易放弃。小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取。

标签: #pythonhsv转rgb语法