Opencv学习笔记(七):如何根据opencv将BGR转换为HSV

简介: 使用OpenCV库在Python中将BGR图像转换为HSV颜色空间的两种方法:一种是直接使用cv2.cvtColor函数,另一种是手动实现RGB到HSV的转换。

方法一

直接调用cv2的函数来生成,具体代码:

import cv2




img=cv2.imread("F:/Dataset/cool/1.jpg")
#change into HSV type
hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)#
#change BGR to RGB
img1=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
img1=cv2.resize(img1,(600,600))
hsv=cv2.resize(hsv,(600,600))
origin=cv2.resize(img,(600,600))

cv2.imshow('BGR',origin)
cv2.imshow('hsv',hsv)
cv2.imshow('RGB',img1)
cv2.waitKey(0)

运行结果:

方法二

首先我们要先得到一张原图的BGR各自的灰度图,有两种方式得到:1.通过cv2.split分离图像的BGR分量,还有一种通过image的矩阵来得到,具体代码如下:

img='F:/Dataset/cool/1.jpg'
image=cv2.imread(img)

# 方法1
"""
B = image[:, :, 0]
G = image[:, :, 1]
R = image[:, :, 2]
"""
# 方法2
(B, G, R) = cv2.split(image) #分离图像的RBG分量

cv2.namedWindow("B",2)   #创建一个窗口
cv2.imshow('B', B)       #显示B分量
cv2.namedWindow("G",2)   #创建一个窗口
cv2.imshow('G', G)       #显示G分量
cv2.namedWindow("R",2)   #创建一个窗口
cv2.imshow('R', R)       #显示R分量

运行结果:
在这里插入图片描述
整个的转换代码如下:

import cv2
import numpy as np
def rgb2hsv(img):
    h = img.shape[0]
    w = img.shape[1]
    H = np.zeros((h,w),np.float32)
    S = np.zeros((h, w), np.float32)
    V = np.zeros((h, w), np.float32)
    r,g,b = cv2.split(img)
    r, g, b = r/255.0, g/255.0, b/255.0
    for i in range(0, h):
        for j in range(0, w):
            mx = max((b[i, j], g[i, j], r[i, j]))
            mn = min((b[i, j], g[i, j], r[i, j]))
            dt=mx-mn

            if mx == mn:
                H[i, j] = 0
            elif mx == r[i, j]:
                if g[i, j] >= b[i, j]:
                    H[i, j] = (60 * ((g[i, j]) - b[i, j]) / dt)
                else:
                    H[i, j] = (60 * ((g[i, j]) - b[i, j]) / dt)+360
            elif mx == g[i, j]:
                H[i, j] = 60 * ((b[i, j]) - r[i, j]) / dt + 120
            elif mx == b[i, j]:
                H[i, j] = 60 * ((r[i, j]) - g[i, j]) / dt+ 240
            H[i,j] =int( H[i,j] / 2)

            #S
            if mx == 0:
                S[i, j] = 0
            else:
                S[i, j] =int( dt/mx*255)
            #V
            V[i, j] =int( mx*255)

    return H, S, V


img=cv2.imread("F:/Dataset/cool/1.jpg")
#change into HSV type
hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)#
#change BGR to RGB
img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
#get h s v channels
h,s,v = rgb2hsv(img)
merged = cv2.merge([h,s,v]) #前面分离出来的三个通道
merged=np.array(merged,dtype='uint8')
merged=cv2.resize(merged,(600,600))
print(merged)

运行结果
在这里插入图片描述

目录
相关文章
|
2月前
|
计算机视觉 索引
OpenCV4学习笔记(2):显示相机视频流的帧率
这篇文章是OpenCV4学习笔记的第二部分,介绍了如何通过OpenCV4在显示相机视频流时计算并显示其帧率,使用`getTickCount`和`getTickFrequency`函数来测量帧时间,并用`putText`在图像上绘制帧率信息。
OpenCV4学习笔记(2):显示相机视频流的帧率
|
5月前
|
算法 API 计算机视觉
[opencv学习笔记] jiazhigang 30讲源码C++版本(含Makefile)
[opencv学习笔记] jiazhigang 30讲源码C++版本(含Makefile)
64 0
|
9天前
|
计算机视觉
OpenCV BGR
【10月更文挑战第09天】
17 1
|
1天前
|
编解码 数据安全/隐私保护 计算机视觉
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
如何使用OpenCV进行同步和异步操作来打开海康摄像头,并提供了相关的代码示例。
11 1
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
|
2天前
|
算法 计算机视觉
Opencv学习笔记(六):cv2.resize函数的介绍
这篇文章介绍了OpenCV库中cv2.resize函数的使用方法,包括其参数、插值方式选择以及实际代码示例。
17 1
Opencv学习笔记(六):cv2.resize函数的介绍
|
1天前
|
计算机视觉
Opencv学习笔记(八):如何通过cv2读取视频和摄像头来进行人脸检测(jetson nano)
如何使用OpenCV库通过cv2模块读取视频和摄像头进行人脸检测,并提供了相应的代码示例。
14 1
|
2天前
|
计算机视觉
Opencv学习笔记(五):cv2.putText()和cv2.rectangle()详细理解
这篇文章详细介绍了OpenCV库中的`cv2.putText()`和`cv2.rectangle()`函数的使用方法,并通过一个实战例子展示了如何使用这些函数在图像上绘制文字和矩形框。
17 0
Opencv学习笔记(五):cv2.putText()和cv2.rectangle()详细理解
|
2天前
|
计算机视觉 Python
Opencv学习笔记(四):如何通过cv2或者通过matplotlib来将多张图拼接成一张图输出
这篇文章介绍了如何使用OpenCV和matplotlib将多张图像拼接成一张图进行输出,并比较了两者的效果和使用注意事项。
10 0
Opencv学习笔记(四):如何通过cv2或者通过matplotlib来将多张图拼接成一张图输出
|
2天前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
23 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
2天前
|
计算机视觉 Python
Opencv学习笔记(二):如何将整个文件下的彩色图片全部转换为灰度图
使用OpenCV库将一个文件夹内的所有彩色图片批量转换为灰度图,并提供了相应的Python代码示例。
11 0
Opencv学习笔记(二):如何将整个文件下的彩色图片全部转换为灰度图