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)