RGB转灰度,通常会使用下面的一个心理学公式:(Matlab和OpenCV中使用的也是该公式)

Gray = 0.2989*R + 0.5870*G + 0.1140*B

抛却指令优化不谈,优化转化速度的最直接方法就是将浮点运算转化为整数运算:

比如我们可以将上式转化为:

Gray = (2989*R + 5870*G + 1140*B)/ 10000,

但是上面的除法还是不够快,我们完全可以使用移位操作来代替:

Gray = (4898*R + 9618*G + 1868*B)>> 14

此外,对大部分计算机视觉应用来说,图像的精度问题不是一个特别敏感的问题,因此我们可以通过降低精度来进一步减少计算量:(我通常使用8位精度)

Gray = (76*R + 150*G + 30*B)>> 8

C++实现如下:

bool rgb2gray(unsigned char *src,unsigned char *dest,int width,int height)
{int r, g, b;for (int i=0;i<width*height;++i){r = *src++; // load redg = *src++; // load greenb = *src++; // load blue// build weighted average:*dest++ = (r * 76 + g * 150 + b * 30) >>8;}return true;
}

其他的精度如下:

        Gray = (R*1 + G*2 + B*1) >> 2Gray = (R*2 + G*5 + B*1) >> 3Gray = (R*4 + G*10 + B*2) >> 4Gray = (R*9 + G*19 + B*4) >> 5Gray = (R*19 + G*37 + B*8) >> 6Gray = (R*38 + G*75 + B*15) >> 7Gray = (R*76 + G*150 + B*30) >> 8Gray = (R*153 + G*300 + B*59) >> 9Gray = (R*306 + G*601 + B*117) >> 10Gray = (R*612 + G*1202 + B*234) >> 11Gray = (R*1224 + G*2405 + B*467) >> 12Gray = (R*2449 + G*4809 + B*934) >> 13Gray = (R*4898 + G*9618 + B*1868) >> 14Gray = (R*9797 + G*19235 + B*3736) >> 15Gray = (R*19595 + G*38469 + B*7472) >> 16Gray = (R*39190 + G*76939 + B*14943) >> 17Gray = (R*78381 + G*153878 + B*29885) >> 18Gray = (R*156762 + G*307757 + B*59769) >> 19Gray = (R*313524 + G*615514 + B*119538) >> 20

C++ RGB转灰度图像相关推荐

  1. Matlab报错:错误使用 rgb2gray>parse_inputs (第 79 行) MAP 必须为 m x 3 的数组。请对 RGB 和灰度图像使用 im2gray。

    拟解决问题: Matlab报错:错误使用 rgb2gray>parse_inputs (第 79 行) MAP 必须为 m x 3 的数组.请对 RGB 和灰度图像使用 im2gray. 下述程 ...

  2. Opencv C++成长之路(七):RGB转换灰度图像

    转换结果 原图像 灰度图像 Show me the code #include <iostream> #include <string> #include <opencv ...

  3. MATLAB(完备)之图像.tif到真彩色图像、索引色图像、灰度图像、 真彩色图像RGB、YIQ图像、HSV图像、YCbCr图像转换代码

    I=imread('flower.tif');%读入图片 whos I imfinfo('flower.tif') imshow(I);title('原始tif图像') %%真彩图像.转索图像.灰度图 ...

  4. java图片转为rgb矩阵_[转载]图像类型转换--RGB图像、索引图像、灰度图像、二值图像和数据矩阵(1)...

    要点: RGB转换为灰度图像(包括将彩色映射表对应的索引图像的映射表转换成灰度映射表'图像其实是彩色的'): RGB转换为索引图像: 灰度图像转换成索引图像: 索引图像转换成灰度图像: 索引图像转换为 ...

  5. matlab中将RGB图像转化为灰度图像

    MyYuanLaiPic = imread('e:/image/matlab/Cluo.jpg');%读取RGB格式的图像 MyFirstGrayPic = rgb2gray(MyYuanLaiPic ...

  6. matlab实现彩色图像转成灰度图像

    代码: MyYuanLaiPic = imread('C:\Users\Administrator\Desktop\11.jpg');%读取RGB格式的图像 MyFirstGrayPic = rgb2 ...

  7. 【opencv】(4) 形态学处理:腐蚀膨胀、梯度运算、礼帽黑帽

    各位同学好,今天和大家分享一下图像的形态学处理方法.内容有: 膨胀腐蚀.开运算和闭运算.梯度运算.礼帽和黑帽 (1)腐蚀:cv2.erode():(2)膨胀:cv2.dilate():(3)形态学函数 ...

  8. 无人驾驶之车道线检测简易版

    无人驾驶技术近些年发展迅速.无人车若想实现自动驾驶,从视觉的角度上讲其要先学会观察道路,具体来说,就是检测车道线.包括识别车道线与车的位置关系,是实线还是虚线等.本文将简单介绍车道线检测的基本技术,包 ...

  9. tensorflow tf.keras.layers tf.image 图像增强

    import matplotlib.pyplot as plt import numpy as np import tensorflow as tf import tensorflow_dataset ...

  10. matlab中fdyn,Matlab的用法总结

    1. 对序列进行洗牌 randperm() randperm()产生随机的序列 %if filepaths 是一个5*1的结构体,then cshuffle = randperm(length(fil ...

最新文章

  1. docker 镜像_Docker镜像分层
  2. 个人计算机上常用的操作系统,个人计算机常用的输出设备 操作系统的发展史(3)...
  3. [Python从零到壹] 八.数据库之MySQL和Sqlite基础知识及操作万字详解
  4. 外观模式(Façade Pattern)
  5. java random用法_JAVA面试题(1)
  6. 阿里云云盾 · 云防火墙技术解读:零配置业务自动分组,安全管理有序、可见...
  7. 数据结构单链表的创建和遍历(后插法)
  8. CentOS 6.6上搭建C++运行环境
  9. OSDI 2022 Roller 论文解读
  10. 解决Android Studio连接不到ios模拟器问题
  11. unity物体四种移动方法总结
  12. NiuMu PayPal/Stripe轮询系统 亲友转账模式同步回调支付结果
  13. 我在上海奋斗的五年---从月薪3500到700万(读后感:一个真汉子的人生)
  14. osgEarth的Rex引擎原理分析(二十五)地形瓦片大小尺寸和LOD的关系
  15. springcloud ribbon实现负载均衡的时候,提示Request URI does not contain a valid hostname: htt...
  16. 98. 我说说你对Java GC机制的理解?
  17. pkl转换json(pkl格式如何打开,pkl2json)
  18. 微信小程序(模板消息)
  19. pancakeswap 前端源码编译及部署-linux
  20. Java的native方法是什么

热门文章

  1. ubuntu-创建桌面快捷方式
  2. 如何在微信窗口使用计算机,电脑微信窗口太大怎么办
  3. NSR | 国科大王艳芬组中国草地多维资源梯度上的单峰生产力与生物多样性关系...
  4. Excel 合并当前工作簿全部工作表的VBA代码
  5. FH153C6常用一键开关机芯片 ON/OFF单键开关IC 美容仪电子开关IC
  6. 内存条hyperx_HyperX是什么牌子内存条
  7. android---动画入门(一)
  8. fn键台式计算机在哪,电脑键盘上FN键的使用方法【图文】
  9. snmp No Such Instance currently exists at this OID
  10. 能连蓝牙键盘吗_300多的小键盘,颜值很能打,GANSS ALT71蓝牙双模机械键盘很香...