RGB2YUV-Opencv-C++
2016-09-26 10:21
387 查看
用Opencv和C++实现将一幅图片从RGB空间转换到YUV空间。
VS2015+Opencv2.4.13
注:博主小白,代码是网上摘抄合并重组来的,侵权删除,谢谢!
【函数介绍】
cvCvtColor(const CvArr* src, CvArr* dst, int code)函数是Opencv里的颜色空间转换函数,可以实现RGB颜色向HSV,HSI,YUV等颜色空间的转换,也可以转换为灰度图像。
src是输入的8-bit,16-bit或32-bit单倍精度浮点数影像;
dst是输出的8-bit,16-bit或32-bit单倍精度浮点数影像;
code是色彩空间转换的模式,CV_BGR2GRAY是RGB到灰度图像,CV_GRAY2BGR是灰度图到RGB,CV_BGR2HSV将图片从RGB空间转换为HSV空间。其中当code选用CV_BGR2GRAY时,dst需要是单通道图片。当code选用CV_BGR2HSV时,对于8位图,需要将rgb值归一化到0-1之间。这样得到HSV图中的H范围才是0-360,S和V的范围是0-1。
【完整代码】
#include <opencv.hpp>
using namespace cv;
int main()
{
IplImage *src = cvLoadImage("Lena.jpg", 1);//原图
IplImage *dst_gray = cvCreateImage(cvGetSize(src), src->depth, 1);//灰度图
cvCvtColor(src, dst_gray, CV_BGR2GRAY);//得到灰度图
IplImage *src_image_32 = cvCreateImage(cvGetSize(src), 32, src->nChannels); //32浮点位的空图,用来承载归一化后的原图
cvConvertScale(src, src_image_32, 1.0 / 255.0, 0);//将原图RGB归一化到0-1之间,因为对原图归一化后得到的是浮点数,因此上面要得到32位浮点空图
IplImage *dst_image = cvCreateImage(cvGetSize(src), 32, src->nChannels); //32位浮点的空图,用来承载转换后的YUV图
cvCvtColor(src_image_32, dst_image, CV_BGR2YUV);//得到YUV图
//新建窗口并显示图片
cvNamedWindow("RGB2YUV", CV_WINDOW_AUTOSIZE);
cvMoveWindow("RGB2YUV", 100, 100);
cvShowImage("RGB2YUV", dst_image);
waitKey(6000);
return 0;
}
VS2015+Opencv2.4.13
注:博主小白,代码是网上摘抄合并重组来的,侵权删除,谢谢!
【函数介绍】
cvCvtColor(const CvArr* src, CvArr* dst, int code)函数是Opencv里的颜色空间转换函数,可以实现RGB颜色向HSV,HSI,YUV等颜色空间的转换,也可以转换为灰度图像。
src是输入的8-bit,16-bit或32-bit单倍精度浮点数影像;
dst是输出的8-bit,16-bit或32-bit单倍精度浮点数影像;
code是色彩空间转换的模式,CV_BGR2GRAY是RGB到灰度图像,CV_GRAY2BGR是灰度图到RGB,CV_BGR2HSV将图片从RGB空间转换为HSV空间。其中当code选用CV_BGR2GRAY时,dst需要是单通道图片。当code选用CV_BGR2HSV时,对于8位图,需要将rgb值归一化到0-1之间。这样得到HSV图中的H范围才是0-360,S和V的范围是0-1。
【完整代码】
#include <opencv.hpp>
using namespace cv;
int main()
{
IplImage *src = cvLoadImage("Lena.jpg", 1);//原图
IplImage *dst_gray = cvCreateImage(cvGetSize(src), src->depth, 1);//灰度图
cvCvtColor(src, dst_gray, CV_BGR2GRAY);//得到灰度图
IplImage *src_image_32 = cvCreateImage(cvGetSize(src), 32, src->nChannels); //32浮点位的空图,用来承载归一化后的原图
cvConvertScale(src, src_image_32, 1.0 / 255.0, 0);//将原图RGB归一化到0-1之间,因为对原图归一化后得到的是浮点数,因此上面要得到32位浮点空图
IplImage *dst_image = cvCreateImage(cvGetSize(src), 32, src->nChannels); //32位浮点的空图,用来承载转换后的YUV图
cvCvtColor(src_image_32, dst_image, CV_BGR2YUV);//得到YUV图
//新建窗口并显示图片
cvNamedWindow("RGB2YUV", CV_WINDOW_AUTOSIZE);
cvMoveWindow("RGB2YUV", 100, 100);
cvShowImage("RGB2YUV", dst_image);
waitKey(6000);
return 0;
}
相关文章推荐
- 【OpenCV】C++如何使RGB图像变为灰度图像
- 【C++版本】OpenCV实现RGB转HSI
- C++ OpenCV 实现RGB彩色图像转化成灰度图像再转换成二值图像
- 基于OpenCV的RGB和HSV色彩空间相互转换C++程序
- 利用OpenCV和C++实现由RGB图像转化为灰度图,再将灰度图转化为二值图的程序
- 基于OpenCV的RGB和HSV色彩空间相互转换C++程序
- opencv [c++版] 学习笔记(2) 在MFC基于对话框界面上播放视频
- 编写高效的C#图像处理程序(4) Rgb=>Lab,C# vs. C++(VC)
- RGB和HSL之间的转换 C++实现
- c++ 读取图片RGB
- 数学之美之分形——C++及OpenCV实现Julia集和Mandelbrot集绘制
- [OPENCV learning] 获取图像的灰度和一维RGB彩色直方图
- C++读取图像的RGB值(两种方法,均经过测试)
- C++版本 yml 文件的读取 based on OpenCV 2.1
- 基于C++的OpenCV常用函数
- c++和opencv学习心得
- 连通区域标记:c++版的bwlabel实现(基于opencv)
- RGB和HSL之间的转换 C++实现
- 关于C++使用opencv链接库无法调用的问题
- opencv 中读取RGB像素值