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月前
|
计算机视觉
Opencv学习笔记(十二):图片腐蚀和膨胀操作
这篇文章介绍了图像腐蚀和膨胀的原理、作用以及使用OpenCV实现这些操作的代码示例,并深入解析了开运算和闭运算的概念及其在图像形态学处理中的应用。
151 1
Opencv学习笔记(十二):图片腐蚀和膨胀操作
|
2月前
|
计算机视觉 Python
Opencv学习笔记(二):如何将整个文件下的彩色图片全部转换为灰度图
使用OpenCV库将一个文件夹内的所有彩色图片批量转换为灰度图,并提供了相应的Python代码示例。
39 0
Opencv学习笔记(二):如何将整个文件下的彩色图片全部转换为灰度图
|
2月前
|
计算机视觉 Python
Opencv学习笔记(一):如何将得到的图片保存在指定目录以及如何将文件夹里所有图片以数组形式输出
这篇博客介绍了如何使用OpenCV库在Python中将图片保存到指定目录,以及如何将文件夹中的所有图片读取并以数组形式输出。
184 0
Opencv学习笔记(一):如何将得到的图片保存在指定目录以及如何将文件夹里所有图片以数组形式输出
|
2月前
|
编解码 数据安全/隐私保护 计算机视觉
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
如何使用OpenCV进行同步和异步操作来打开海康摄像头,并提供了相关的代码示例。
108 1
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
|
2月前
|
算法 计算机视觉
Opencv学习笔记(六):cv2.resize函数的介绍
这篇文章介绍了OpenCV库中cv2.resize函数的使用方法,包括其参数、插值方式选择以及实际代码示例。
378 1
Opencv学习笔记(六):cv2.resize函数的介绍
|
2月前
|
计算机视觉
Opencv学习笔记(八):如何通过cv2读取视频和摄像头来进行人脸检测(jetson nano)
如何使用OpenCV库通过cv2模块读取视频和摄像头进行人脸检测,并提供了相应的代码示例。
118 1
|
2月前
|
计算机视觉
Opencv学习笔记(五):cv2.putText()和cv2.rectangle()详细理解
这篇文章详细介绍了OpenCV库中的`cv2.putText()`和`cv2.rectangle()`函数的使用方法,并通过一个实战例子展示了如何使用这些函数在图像上绘制文字和矩形框。
205 0
Opencv学习笔记(五):cv2.putText()和cv2.rectangle()详细理解
|
2月前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
504 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
2月前
|
计算机视觉
OpenCV BGR
【10月更文挑战第09天】
38 1
|
2月前
|
编解码 计算机视觉 Python
Opencv学习笔记(九):通过CV2将摄像头视频流保存为视频文件
使用OpenCV库通过CV2将摄像头视频流保存为视频文件,包括定义视频编码格式、设置保存路径、通过write写入视频文件,并提供了相应的Python代码示例。
148 0