颜色空间转换

示例代码

#pragma comment(lib,"cxcore.lib")
#pragma comment(lib,"cv.lib")
#pragma comment(lib,"highgui.lib")
#pragma comment(lib,"ml.lib")
#pragma comment(lib,"cvcam.lib")
#pragma comment(lib,"cvaux.lib")


#include <stdio.h>
#include <iostream>

#include <cv.h>
#include <cxcore.h>
#include <highgui.h>

using namespace std;

void show(IplImage* img)
{


	for (int y=0;y<img->height;y++)
	{
		for (int x=0;x<img->width;x++)
		{
			
			float value=cvGetReal2D(img,y,x);
			
			//	if(value > 350  )
			printf("%f ",value);
			
		}
		//printf("\n");
	}
}

int main()
{
	IplImage* src=cvLoadImage("img//sub.jpg");

	//1  RGB 转化为 HSV------------------------------------------------------------
	IplImage* src_float=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,3);
	cvConvertScale(src,src_float,1.0,0);// 数值表示 8位(0-255)(RGB) -- 转化为 32 位浮点型,因子不变,偏移不变

	
	IplImage* hsv=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,3);

	IplImage* h=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,1);//一般情况下 BGR2HSV 当使用的8位的图像时,转换后 H通道的取值范围是[0,180]
	IplImage* s=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,1);
	IplImage* v=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,1);

	
	cvCvtColor(src_float,hsv,CV_BGR2HSV);//转化  需要类型一样
	cvSplit(hsv,h,s,v,NULL);//

	//show(h);//色彩 0-360
	//show(s);//饱和度 0 - 1.0
	//show(v);//亮度 0 - 255

	//2 RGB 转化为 HSV-----------------------------------------------------------------------
	//保存 HSV 图像---必须转化8位的RGB类型 才能够保存
	IplImage* _hsv=cvCreateImage(cvGetSize(src),8,3);
	
	IplImage* _h=cvCreateImage(cvGetSize(src),8,1);//一般情况下 BGR2HSV 当使用的8位的图像时,转换后 H通道的取值范围是[0,180]
	IplImage* _s=cvCreateImage(cvGetSize(src),8,1);
	IplImage* _v=cvCreateImage(cvGetSize(src),8,1);

	cvConvertScale(h,_h,(1/360.0)*255,0);//h通道 0- 360 转化为 0-255
	cvConvertScale(s,_s,255.0,0);//S 0--1  因子设置为255
	cvConvertScale(v,_v,1,0);//0-255  保持不变

	cvMerge(_h,_s,_v,NULL,_hsv);//合并通道

	cvNamedWindow("_hsv");
	cvShowImage("_hsv",_hsv);
	///----------------------------------------


	
	

	cvNamedWindow("src");
	cvShowImage("src",src);



	//直接用函数转换------------
	IplImage* rgb=cvCreateImage(cvGetSize(src_float),8,3);
	cvConvertScale(src_float,rgb,1.0,0);

	cvNamedWindow("rgb");
	cvShowImage("rgb",rgb);
	
	



	


	cvWaitKey(0);

	return 0;
}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值