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 <cv.h>
#include <highgui.h>
#include <iostream> 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]"<<endl;
return -1;
} image = imread(argv[1]);
if (!image.data) {
cout<<"Read image error."<<endl;
} cout<<"Enter alpha value[1-3]:"<<endl;
cin>>alpha;
cout<<"Enter beta value[0-100]:"<<endl;
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<n; i++) {
*q++ = saturate_cast<uchar>(alpha * (*p++) + beta);
} namedWindow("origin", CV_WINDOW_AUTOSIZE);
imshow("origin", image);
namedWindow("result", CV_WINDOW_AUTOSIZE);
imshow("result", result); waitKey(0); return 0;
}
- 用到Mat::create成员方法用于对Mat对象的数据赋值
saturate_cast在operations.hpp中定义和声明。这里的传人參数为float类型。调用的是
template<> inline uchar saturate_cast<uchar>(float v)
{int iv = cvRound(v); return saturate_cast<uchar>(iv);}
当中调用重载函数saturate_cast(int)完毕。该函数的实现是:
template<> inline uchar saturate_cast<uchar>(int v)
{return (uchar)((unsigned)v <= UCHAR_MAX ? v : v > 0 ? UCHAR_MAX : 0)}
由于?
:运算符是右结合特性,saturate_cast函数的作用就是:限制数据范围为0~255。超过255的值取255,小于0的值取0
像素操作:这里没有使用ptr指针(由于操作不用考虑像素的详细x、y坐标,是单像素到单像素的映射),当然使用ptr也能够。Mat的data成员是数据头指针。程序通过指针*p与*q索引图片中的元素进行操作赋值
效果
左边为元素图像。右边为alpha=1,Beta=50时的增强亮度后的图像。
OpenCV基础篇之像素操作对照度调节的更多相关文章
- OpenCV基础篇之读取显示图片
程序及分析 /* * FileName : read.cpp * Author : xiahouzuoxin @163.com * Version : v1.0 * Date : Tue 13 May ...
- opencv——基础篇
一 . opencv是什么及其作用? OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效— ...
- opencv——图像遍历以及像素操作
摘要 我们在图像处理时经常会用到遍历图像像素点的方式,在OpenCV中一般有四种图像遍历的方式,在这里我们通过像素变换的点操作来实现对图像亮度和对比度的调整. 补充: 图像变换可以看成 像素变换--点 ...
- Node基础篇(文件操作)
文件操作 相关模块 Node内核提供了很多与文件操作相关的模块,每个模块都提供了一些最基本的操作API,在NPM中也有社区提供的功能包 fs: 基础的文件操作 API path: 提供和路径相关的操作 ...
- OpenCV基础篇之查找表
程序及分析 /* * FileName : lookup_table.cpp * Author : xiahouzuoxin @163.com * Version : v1.0 * Date : Su ...
- Python学习—基础篇之文件操作
文件操作 文件操作也是编程中需要熟练掌握的技能,尤其是在后台接口编写和数据分析过程中,对各种类型的文件进行操作,获取文件信息或者对信息进行存储是十分重要的.本篇博客中将主要对常见的文本格式文件和Exc ...
- OpenCV图像处理篇之阈值操作函数
阈值操作类型 这5种阈值操作类型保留opencv tutorials中的英文名称.依次为: Threshold Binary:即二值化,将大于阈值的灰度值设为最大灰度值.小于阈值的值设为0. Thre ...
- OpenCV基础篇之画图及RNG随机数对象
程序及分析 /* * FileName : random_gen.c * Author : xiahouzuoxin @163.com * Version : v1.0 * Date : Tue 29 ...
- 自动化测试基础篇--Selenium cookie操作
摘自https://www.cnblogs.com/sanzangTst/p/8376471.html 在验证浏览器中cookie是否正确时,有时基于真实cookie的测试是无法通过白盒和集成测试进行 ...
随机推荐
- 类函数:string、math
类:系统内置的处理字符串类型的函数方法类. string是String的快捷方式.所包含的内容都是一样的. Int i=x.length;//获取一个字符串长度 字符串中,索引号从0开始 String ...
- json常识
转载网址:http://developer.51cto.com/art/201704/536386.htm 我们先来看一个JS中常见的JS对象序列化成JSON字符串的问题. 请问:以下JS对象通过 ...
- 专题六:UDP编程
引用: 前一个专题简单介绍了TCP编程的一些知识,UDP与TCP地位相当的另一个传输层协议,它也是当下流行的很多主流网络应用(例如QQ.MSN和Skype等一些即时通信软件传输层都是应用UDP协议的) ...
- php函数的定义和声明
1.函数的定义 函数是一个被命名的独立的代码段,它执行特定任务,并可以给调用它的程序返回值. 2.函数的优点 提高程序的重用性 提高程序的可维护性 可以提高软件的开发效率 提高软件的可靠性 控制程序的 ...
- NodeJs学习记录(一)初步学习,杂乱备忘
2016/12/26 星期一 1.在win7下安装了NodeJs 1)进入官网 https://nodejs.org/en/download/,下载对应的安装包,我目前下载的是node-v6.2.0- ...
- 06使用NanoPiM1Plus在Android4.4.2下接U盘
06使用NanoPiM1Plus在Android4.4.2下接U盘 大文实验室/大文哥 壹捌陆捌零陆捌捌陆捌贰 21504965 AT qq.com 完成时间:2017/12/5 17:51 版本:V ...
- C语言常见问题总结
1.多次运行程序 解决方法: 错误原因是,已经编译运行出一个exe,没有关闭此exe,又点击编译运行. 应该将之前运行出的exe关闭,再来运行代码 2.单精度类型和双精度类型如何区分使用... 解决方 ...
- quartz在集群环境下的最终解决方案
在集群环境下,大家会碰到一直困扰的问题,即多个 APP 下如何用 quartz 协调处理自动化 JOB . 大家想象一下,现在有 A , B , C3 台机器同时作为集群服务器对外统一提供 SERVI ...
- 通过Maven将指定Jar包下载到指定的本地目录
现在大家大部分都通过Maven等工具来管理包,但是特殊情况下还是需要将包下载到本地.我们可以通过maven命令来完成这个需求.创建一个pom.xml文件,文件内容如下: <?xml versio ...
- CAD得到多行文本(com接口VB语言)
主要用到函数说明: MxDrawXCustomFunction::Mx_GetMTextContent 得到多行文本的,不包括格式控制符中的字符串值,详细说明如下: 参数 说明 LONG lId 多行 ...