1.介绍

对于图像的对比度和亮度的调整,我不多介绍了,这都是基本功,主要是根据公式dst = alpha * src + beta(alpha控制对比度,beta控制亮度)。对于它的实现方法,其实有多种,比如for循环遍历(无上下文依赖关系,可用SSE来优化)、查表法(输出在0-255之间)和本文的猪脚convertTo。

void convertTo( OutputArray m, int rtype, double alpha=1, double beta=0 ) const;

实现:convertTo实现的功能就是dst = alpha * src + beta

2.代码

  1. #include<opencv2\opencv.hpp>

  2. #include<iostream>

  3. using namespace std;

  4. using namespace cv;

  5. double alpha = 1;

  6. double beta = 50;

  7. void changeContrastAndBright(const Mat& src, Mat& dst) {

  8. for (int i = 0; i < src.rows; i++)

  9. {

  10. for (int j = 0; j < src.cols; j++)

  11. {

  12. for (int k = 0; k < 3; k++)

  13. {

  14. dst.at<Vec3b>(i, j)[k] =

  15. saturate_cast<uchar>(alpha*(src.at<Vec3b>(i, j)[k]) + beta);

  16. }

  17. }

  18. }

  19. }

  20. int main() {

  21. Mat src = imread("test.png");

  22. Mat dst1;

  23. Mat dst2 = Mat::zeros(src.size(), src.type());

  24. double time0 = static_cast<double>(getTickCount());

  25. changeContrastAndBright(src, dst2);

  26. time0 = ((double)getTickCount() - time0) / getTickFrequency();

  27. cout << "直接遍历方法运行时间为:" << time0 << "秒" << endl;

  28. time0 = static_cast<double>(getTickCount());

  29. src.convertTo(dst1, src.type(), alpha, beta);

  30. time0 = ((double)getTickCount() - time0) / getTickFrequency();

  31. cout << "convertTo方法运行时间为:" << time0 << "秒" << endl;

  32. imshow("src", src);

  33. imshow("dst1", dst1);

  34. imshow("dst2", dst2);

  35. waitKey();

  36. return 0;

  37. }

Debug和Release下运行,都表明convertTo法比较快

3.扩展应用

比如进行反色也是可以的,和这个有得一拼:Opencv之高效函数LUT,建议读者也看看。

Opencv之.convertTo相关推荐

  1. openCV中convertTo的用法1

    convertTo的用法 src.convertTo(dst, type, scale, shift) img参数为图像数据来源,其类型为Mat. 注意也不是所有格式的Mat型数据都能被使用保存为图片 ...

  2. 【学习 OpenCV】—— Mat setTo/convertTo/copyTo

    1. setTo Mat orig = imread("in.jpg"); Mat test = orig.clone(); test.setTo(Scalar::all(255) ...

  3. 保存OpenCV中Mat_Vec3f格式的图像

    在OpenCV中,有时会出现如Mat_<Vec3f>图像类型,直接用cvsaveImage或者imwrite保存,会出现一片黑色.保存失败: 如下 这是定义格式问题 此时,需要转换正确的格 ...

  4. java获取系统dpi_Java DPI介绍

    Java BufferedImageClass Java BufferedImage类是Image类的子类. 它用于处理和操作图像数据. BufferedImage由图像数据的ColorModel组成 ...

  5. 第4章 深度估计与分割(SGBM、GrabCut、分水岭) 个人笔记

    文章目录 1. 前言 2. 极几何计算视差图 2.1 StereoSGBM算法代码 2.2 StereoSGBM算法思路解析 2.3 个人疑惑 3. GrabCut算法代码 4. 分水岭算法 4.1 ...

  6. Excel Charting Utility赠品

    Excel Charting Utility赠品 (Excel Charting Utility Giveaway) Last week, you had a chance to win John W ...

  7. OpenCV 中的 convertTo 函数

    文章转载自: iracer的CSDN博客 http://blog.csdn.net/iracer/article/details/49204147 https://blog.csdn.net/qq_2 ...

  8. OpenCV—矩阵数据类型转换cv::convertTo

    OpenCV-矩阵数据类型转换cv::convertTo 函数 [cpp] view plaincopy void convertTo( OutputArray m, int rtype, doubl ...

  9. 贤者之路,cuda版本convertto实现(与OPENCV 3.4 CPU版本数值一致)

    [引言]: 将一个float32精度的矩阵砍到uchar精度,每个库都会根据自己算法目标类型做一些加速的优化从而导致结果不一样,比如在OpenCV3.4 cpu版本的convertto中, 1.5f的 ...

  10. opencv笔记(三十一)——Mat 矩阵数据类型转换convertTo

    一.数据类型转换 1.一般图像文件格式使用的是unsigned 8bits,对应的数据类型有:CV_8UC1.CV_8UC2,CV_8UC3 其中,CV_8UC3表示3通道8位的unsigned ch ...

最新文章

  1. 从源码分析DEARGUI之add_input_text
  2. 如何在 SAP Spartacus 自定义 UI 里使用标准 UI 的上下文数据 - let 关键字的用法
  3. 家里的网很慢,如何用手机查看都有多少人使用?
  4. linux查找有用日志常用技巧
  5. Tomcat access log配置
  6. 使用pycharm出现黄色框的情况
  7. mysql查询地理位置_利用curl和ip138的数据库来查询IP地址地理位置
  8. (二)Chrome新标签页的设置
  9. 如何理解CPU卡内部认证与外部认证
  10. mysql 枚举字段,MySQL字段中的枚举是什么意思 | 学步园
  11. springboot项目搭建0051-通用mapper使用mapper.xml
  12. 【阿里云】Apsara Clouder云计算专项技能认证-云服务器ECS入门,考试真题分享
  13. 全球与中国小龙虾市场深度研究分析报告
  14. Acwing 104. 货仓选址 (数学题,绝对值不等式)
  15. 机器学习-周志华-课后习题答案5.5
  16. 高通中国区VR/AR负责人 郭鹏:XR要成功,最关键、最底层的技术就是空间计算
  17. 水泵微型计算机辅助设计内容,基于CFD技术的脱硫浆液泵节能技术研究
  18. JS简写技巧(来自于微信公众号-前端之巅)
  19. APISIX微服务网关
  20. 棋牌游戏 投资风险 政策_机会,风险和政策

热门文章

  1. Mac使用终端连接远程LInux,FTP连接
  2. 菜鸟教程Python100例-笔记
  3. 深度去除WinRAR广告
  4. win8 计算机服务,Win8.1系统下哪些服务可以关闭
  5. 使用idea打包war包部署
  6. 计算机网络(自顶向下方法)-网络层
  7. 【WeUI】关于jQuery WeUI和WeUI版本兼容的问题
  8. MacBook上Wi-Fi抓包权限
  9. python合并大量ts文件_python之爬虫(爬取.ts文件并将其合并为.MP4文件——以及一些异常的注意事项)...
  10. 使用 ffmpeg 进行视频(ts)合并