基于HSI颜色模型实现去除照片的“红眼现象”

接上篇博文中的RGB颜色模型转换为HSI颜色模型,做了消除红眼的算法。

基本的算法描述如下:


代码:

#include "opencv_libs.h"
#include <highgui.h>
#include <cv.h>
#include <math.h>

/*
 * 描述:基于HSI颜色模型消除红眼
 * 作者:qdsclove([email protected])
 * 时间:22:49 4/18 星期四 2013
 */

/* 鼠标选择的矩形 */
CvRect rect;
/* 标记是否在画 */
bool draw = false;
/* 确定下来的眼睛矩形 */
CvRect eyeRect;
/* 是否选定眼睛区域 */
bool isFinalRect = false;

IplImage* img;  
IplImage* temp;  
IplImage* original; 

// 将HSI颜色空间的三个分量组合起来,便于显示
IplImage* catHSImage(CvMat* HSI_H, CvMat* HSI_S, CvMat* HSI_I)
{
	IplImage* HSI_Image = cvCreateImage( cvGetSize( HSI_H ), IPL_DEPTH_8U, 3 );

	for(int i = 0; i < HSI_Image->height; i++)
	{
		for(int j = 0; j < HSI_Image->width; j++)
		{
			double d = cvmGet( HSI_H, i, j );
			int b = (int)(d * 255/360);
			d = cvmGet( HSI_S, i, j );
			int g = (int)( d * 255 );
			d = cvmGet( HSI_I, i, j );
			int r = (int)( d * 255 );

			cvSet2D( HSI_Image, i, j, cvScalar( b, g, r ) );
		}
	}
	return HSI_Image;
}

// 将HSI颜色模型的数据转换为RGB颜色模型的图像
IplImage* HSI2RGBImage(CvMat* HSI_H, CvMat* HSI_S, CvMat* HSI_I)
{
	IplImage * RGB_Image = cvCreateImage(cvGetSize(HSI_H), IPL_DEPTH_8U, 3 );

	int iB, iG, iR;
	for(int i = 0; i < RGB_Image->height; i++)
	{
		for(int j = 0; j < RGB_Image->width; j++)
		{
			// 该点的色度H
			double dH = cvmGet( HSI_H, i, j );
			// 该点的色饱和度S
			do
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值