OpenCV(五):图像颜色空间转换

简介: OpenCV(五):图像颜色空间转换

1.图像颜色空间介绍

  1. RGB 颜色空间

RGB 颜色空间是最常见的颜色表示方式之一,其中 R、G、B 分别表示红色、绿色和蓝色分量。在 OpenCV 中,RGB 图像可以通过 CvType.CV_8UC3 的类型来表示,其中 8U 表示 8 位无符号整数,C3 表示三个通道。

2.HSV 颜色空间

HSV (Hue, Saturation, Value) 颜色空间是一种将颜色表示为色调、饱和度和亮度三个分量的方式。色调表示颜色的基本色相,取值范围为 0 到 360;饱和度表示颜色的纯度,取值范围为 0 到 1;亮度表示颜色的亮度,取值范围也为 0 到 1。在 OpenCV 中,HSV 图像可以通过 CvType.CV_8UC3 的类型来表示。

3.RGBA 颜色空间

在 RGBA 颜色空间中,每个分量的取值范围为 0 到 255,其中 R、G、B 分别表示红色、绿色和蓝色分量,取值范围为 0-255,而 A 表示透明度分量,取值范围为 0-255,其中 0 表示完全透明,255 表示完全不透明。

4.YUV

      YUV主要应用于优化彩色视频信号的传输,与RGB相比,YUV只需要占用极少的频宽(RGB需要三个独立的视频信号同时传输)。YUV中Y代表明亮度,也称灰阶值;U与V表示的则是色度 (色调和饱和度)也可以记作:YCbCr。如果只有Y数据,那么表示的图像就是黑白的。

YUV和RGB的转换:

Y=0.299R +0.587G +0.114B

U=-0.147R-0.289G-0.436B

V=0.615-0.515G-0.100B

R = Y +1.140V

G=Y-0.395U-0.581V

B=Y+2.032U

2.图像数据类型间的互相转换convertTo()

void cv::Mat::convertTo ( OutputArray m,

int         rtype,

double   alpha,

double   beta ,

)      

  • m:输出图像
  • rtype: 转换后数据类型
  • alpha:缩放系数
  • beta:平移系数

3.不同颜色空间互相转换cvtColor()

void cv::cvtColor ( InputArray  src,

                             OutputArray  dst,

                              int   code,

                              int    dstCn

  • src:待转换颜色模型的原始图像。
  • dst:转换颜色模型后的目标图像。
  • code: 颜色空间转换的标志,如由RGB空间到HSV空间。
  • dstCn:目标图像中的通道数,如果参数为0,则从src和代码中自动导出通道数。

4.Android JNI demo

#include <jni.h>
#include <string>
#include <android/bitmap.h>
#include <opencv2/opencv.hpp>
#include <iostream>
#include <android/log.h>
using namespace cv;
using namespace std;
extern "C"
JNIEXPORT void JNICALL
Java_com_example_myapplication_MainActivity_opencv_1test(JNIEnv *env, jclass clazz,
jobject bitmap) {
AndroidBitmapInfo info;
void *pixels;
CV_Assert(AndroidBitmap_getInfo(env, bitmap, &info) >= 0);
//判断图片是位图格式有RGB_565 、RGBA_8888
CV_Assert(info.format == ANDROID_BITMAP_FORMAT_RGBA_8888 ||
info.format == ANDROID_BITMAP_FORMAT_RGB_565);
CV_Assert(AndroidBitmap_lockPixels(env, bitmap, &pixels) >= 0);
CV_Assert(pixels);
//将bitmap转化为Mat类
Mat image(info.height, info.width, CV_8UC4, pixels);
Mat image32;
image.convertTo(image32,CV_32F,1/255,0);
Mat HSV;
cvtColor(image,HSV,COLOR_BGR2HSV);
Mat gray;
cvtColor(image,gray,COLOR_BGR2GRAY);
imwrite("/sdcard/DCIM/gray.jpg",gray);//保存图像到手机相册
imwrite("/sdcard/DCIM/HSV.jpg",HSV);
}

                 

    (原图)                                    (HSV)                                      (gray)

目录
相关文章
|
1月前
|
计算机视觉 Python
opencv识别颜色
opencv识别颜色
|
7天前
|
机器人 计算机视觉
巧用 OpenCV solvePnP() 函数完成由图像坐标系到机器人坐标系的转换(二维坐标系之间的转换)
巧用 OpenCV solvePnP() 函数完成由图像坐标系到机器人坐标系的转换(二维坐标系之间的转换)
20 2
|
1月前
|
机器学习/深度学习 XML 计算机视觉
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
|
2月前
|
算法 计算机视觉
【Qt&OpenCV 图像的感兴趣区域ROI】
【Qt&OpenCV 图像的感兴趣区域ROI】
58 1
|
2月前
|
运维 算法 计算机视觉
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
30 1
|
2月前
|
存储 编解码 算法
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
48 0
|
2月前
|
算法 计算机视觉
【Qt&OpenCV 图像边缘检测 Sobel/Laplace/Canny】
【Qt&OpenCV 图像边缘检测 Sobel/Laplace/Canny】
25 0
|
2月前
|
算法 计算机视觉
【Qt&OpenCV 图像的形态学变换 morpholgyEx】
【Qt&OpenCV 图像的形态学变换 morpholgyEx】
20 0
|
2月前
|
算法 计算机视觉
【Qt&OpenCV 图像阈值操作 threshold】
【Qt&OpenCV 图像阈值操作 threshold】
25 0
|
2月前
|
资源调度 算法 计算机视觉
【Qt&OpenCV 图像平滑/滤波处理 -- Blur/Gaussian/Median/Bilateral】
【Qt&OpenCV 图像平滑/滤波处理 -- Blur/Gaussian/Median/Bilateral】
37 0