设为首页 加入收藏

TOP

OpenCV基础篇之像素操作对比度调节
2014-11-23 21:40:05 来源: 作者: 【 】 浏览:18
Tags:OpenCV 基础 像素 操作 对比度 调节

OpenCV基础篇之像素操作对比度调节


程序及分析


/*
* FileName : contrast.cpp
* Author : xiahouzuoxin @163.com
* Version : v1.0
* Date : Tue 29 Jul 2014 08:09:57 PM CST
* Brief :
*
* Copyright (C) MICL,USTB
*/
#include
#include
#include



using namespace cv;
using namespace std;


int main(int argc, char *argv[])
{
float alpha = 0;
int beta = 0;
Mat image;
Mat result;


if (argc<2) {
cout<<"Usage:./contrast [image_name]"< return -1;
}


image = imread(argv[1]);
if (!image.data) {
cout<<"Read image error."< }


cout<<"Enter alpha value[1-3]:"< cin>>alpha;
cout<<"Enter beta value[0-100]:"< cin>>beta;


result.create(image.size(), image.type());


int n = image.rows * image.cols * image.channels();
uchar *p = image.data;
uchar *q = result.data;
for (int i=0; i *q++ = saturate_cast(alpha * (*p++) + beta);
}


namedWindow("origin", CV_WINDOW_AUTOSIZE);
imshow("origin", image);
namedWindow("result", CV_WINDOW_AUTOSIZE);
imshow("result", result);


waitKey(0);


return 0;
}
1.用到Mat::create成员方法用于对Mat对象的数据赋值
2.
saturate_cast在operations.hpp中定义和声明,这里的传人参数为float类型,调用的是
template<> inline uchar saturate_cast(float v)
{int iv = cvRound(v); return saturate_cast(iv);}


其中调用重载函数saturate_cast(int)完成,该函数的实现是:
template<> inline uchar saturate_cast(int v)
{return (uchar)((unsigned)v <= UCHAR_MAX v : v > 0 UCHAR_MAX : 0)}


由于 :运算符是右结合特性,saturate_cast函数的作用就是:限制数据范围为0~255,超过255的值取255,小于0的值取0


3.
像素操作:这里没有使用ptr指针(因为操作不用考虑像素的具体x、y坐标,是单像素到单像素的映射),当然使用ptr也可以。Mat的data成员是数据头指针,程序通过指针*p与*q索引图片中的元素进行操作赋值



效果


OpenCV基础篇之像素操作对比度调节


左边为元素图像,右边为alpha=1,Beta=50时的增强亮度后的图像。


--------------------------------------分割线 --------------------------------------


--------------------------------------分割线 --------------------------------------


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇OpenCV基础篇之绘图及RNG随机数对.. 下一篇OpenCV基础篇之查找表

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: