Opencv之.convertTo

本文介绍使用OpenCV库中的convertTo函数快速调整图像对比度和亮度的方法,并通过代码演示了其与传统遍历方法的效率对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.  
  4. using namespace std;

  5. using namespace cv;

  6.  
  7. double alpha = 1;

  8. double beta = 50;

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

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

  13. {

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

  15. {

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

  17. {

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

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

  20. }

  21. }

  22. }

  23.  
  24. }

  25.  
  26.  
  27. int main() {

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

  29. Mat dst1;

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

  31.  
  32. double time0 = static_cast<double>(getTickCount());

  33. changeContrastAndBright(src, dst2);

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

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

  36.  
  37. time0 = static_cast<double>(getTickCount());

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

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

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

  41.  
  42. imshow("src", src);

  43. imshow("dst1", dst1);

  44. imshow("dst2", dst2);

  45. waitKey();

  46. return 0;

  47. }

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

 

3.扩展应用

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值