基于opencv的简单亮度校正功能实现
2013-05-20 09:58
561 查看
今天找到了个简单亮度校正功能的方法感觉效果还可以,使用于简单背景
代码如下
int _tmain(int argc, _TCHAR* argv[])
{
IplImage* src;
// 第一条命令行参数确定了图像的文件名。
char* filename = (char*)"C:\\Users\\chenchao\\Desktop\\结晶\\25.bmp";
if( (src = cvLoadImage( filename, 0)) == 0 )
return -1;
cvNamedWindow( "src", 1 );
cvShowImage( "src", src );
IplImage* mean=cvCreateImage(cvGetSize(src), 8, 1 );
IplImage* dst=cvCreateImage(cvGetSize(src), 8, 1 );
cvSmooth( src, mean, CV_MEDIAN , 101, 101, 0, 0 );
cvNamedWindow( "mean", 1 );
cvShowImage( "mean", mean );
int i,j;
int k;
double val,val_mean,val_dst;
float factor=0.7;
int step_src=src->widthStep/sizeof(uchar);
int step_mean=mean->widthStep/sizeof(uchar);
for(j=0;j<src->height;j++)
{
for(i=0;i<src->width;i++)
{
k=j*step_src+i;
val=((uchar*)(src->imageData))[k]; //获取源图像像素点数据
val_mean=((uchar*)(mean->imageData))[k];//获取平滑处理后的图像像素点
val_dst=(int)( (127-val_mean)*factor + val ); //计算目标像素值
//防止数据越界
if(val_dst<0)
val_dst=0;
//转换成整数复制
((uchar*)(dst->imageData))[k]=(int)val_dst;
}
}
cvNamedWindow( "dst", 1 );
cvShowImage( "dst", dst );
cvWaitKey(0);
cvSaveImage("C:\\Users\\chenchao\\Desktop\\1.bmp",dst);
cvReleaseImage(&src);
cvReleaseImage(&mean);
cvReleaseImage(&dst);
cvDestroyWindow("src");
cvDestroyWindow("mean");
cvDestroyWindow("dst");
return 0;
}
代码如下
int _tmain(int argc, _TCHAR* argv[])
{
IplImage* src;
// 第一条命令行参数确定了图像的文件名。
char* filename = (char*)"C:\\Users\\chenchao\\Desktop\\结晶\\25.bmp";
if( (src = cvLoadImage( filename, 0)) == 0 )
return -1;
cvNamedWindow( "src", 1 );
cvShowImage( "src", src );
IplImage* mean=cvCreateImage(cvGetSize(src), 8, 1 );
IplImage* dst=cvCreateImage(cvGetSize(src), 8, 1 );
cvSmooth( src, mean, CV_MEDIAN , 101, 101, 0, 0 );
cvNamedWindow( "mean", 1 );
cvShowImage( "mean", mean );
int i,j;
int k;
double val,val_mean,val_dst;
float factor=0.7;
int step_src=src->widthStep/sizeof(uchar);
int step_mean=mean->widthStep/sizeof(uchar);
for(j=0;j<src->height;j++)
{
for(i=0;i<src->width;i++)
{
k=j*step_src+i;
val=((uchar*)(src->imageData))[k]; //获取源图像像素点数据
val_mean=((uchar*)(mean->imageData))[k];//获取平滑处理后的图像像素点
val_dst=(int)( (127-val_mean)*factor + val ); //计算目标像素值
//防止数据越界
if(val_dst<0)
val_dst=0;
//转换成整数复制
((uchar*)(dst->imageData))[k]=(int)val_dst;
}
}
cvNamedWindow( "dst", 1 );
cvShowImage( "dst", dst );
cvWaitKey(0);
cvSaveImage("C:\\Users\\chenchao\\Desktop\\1.bmp",dst);
cvReleaseImage(&src);
cvReleaseImage(&mean);
cvReleaseImage(&dst);
cvDestroyWindow("src");
cvDestroyWindow("mean");
cvDestroyWindow("dst");
return 0;
}
相关文章推荐
- OpenCV简单亮度校正功能实现
- jQuery基于扩展简单实现倒计时功能的方法
- 基于Server-Sent Event的简单聊天室 Web 2.0时代,即时通信已经成为必不可少的网站功能,那实现Web即时通信的机制有哪些呢?在这门项目课中我们将一一介绍。最后我们将会实现一个基于Server-Sent Event和Flask简单的在线聊天室。
- 基于php和mysql的简单的dao类实现crud操作功能
- 基于opencv的相机之马赛克功能实现(九)
- 基于百度地图 Android SDKv1.3.5实现简单的定位功能,自定义标题栏
- 基于Server-Sent Event的简单聊天室 Web 2.0时代,即时通信已经成为必不可少的网站功能,那实现Web即时通信的机制有哪些呢?在这门项目课中我们将一一介绍。最后我们将会实现一个基于Server-Sent Event和Flask简单的在线聊天室。
- OpenCV实现基于傅里叶变换的旋转文本校正
- 基于opencv的相机之拼图功能实现(十)
- 基于opencv的hog+svm简单分类实现
- 基于VS C++平台的OpenCV设置,实现简单的行人检测
- 用C语言实现TFTP的简单功能(基于TCP)
- 基于Struts2和Android的简单登陆注册功能的设计与实现(待完善)
- 火力全开——仿造Baidu简单实现基于Lucene.net的全文检索的功能
- Android基于socket实现的简单C/S聊天通信功能
- javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG、javaCV-openCV)
- PHP基于socket实现的简单客户端和服务端通讯功能示例
- 基于opencv的相机之鬼怪贴图功能实现(十一)
- javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG、javaCV-openCV)
- Spring 学习——基于Spring WebSocket 和STOMP实现简单的聊天功能