目录
1.图像颜色空间介绍
RGB 颜色空间
2.HSV 颜色空间
3.RGBA 颜色空间
2.图像数据类型间的互相转换convertTo()
3.不同颜色空间互相转换cvtColor()
4.Android JNI demo
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 表示完全不透明。
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)