三种方式可以将彩色图像转成灰度图对比

彩色图像转换灰度图像 使用Python语言与OpenCV库编写图像彩色空间转换灰度图像算法。尝试采用三通道的平均值、最大值、最小值、经典的加权转换作为最终灰度图像的值,比较它们与OpenCV库的cvtColor()函数结果,并优化程序代码,提高其运行速度。 阅读详情
AI摘要

博客介绍了三种将彩色图像转成灰度图的方式,分别是直接读取灰度图像、用公式转换、调用cvtColor函数。通过测试对比发现,公式转换和调用函数转换结果几乎一样,而直接按灰度方式读取与前两者差距较大,还附上了代码。

有三种方式可以将彩色图像转成灰度图

1、直接imread(“1.jpg” , 0);直接读取灰度图像
2、读取彩色图像然后 灰度 = 0.299 * 红色 + 0.587 * 绿色 + 0.114 * 蓝色进行转换
3、调用cvtColor函数cvtColor(srcImg, imgShow, COLOR_BGR2GRAY);

通过测试来对比三者的区别:

调用cvtColor(srcImg, imgShow, COLOR_BGR2GRAY); // 图像格式转换和直接读取灰度的方式读取,通过保存像素值,能看出来二者差距挺大
在这里插入图片描述
通过调用cvtColor(srcImg, imgShow, COLOR_BGR2GRAY); // 图像格式转换
和用灰度 = 0.299 * 红色 + 0.587 * 绿色 + 0.114 * 蓝色公式进行转换,发现相差很小,基本都是一个像素
在这里插入图片描述
通过输出发现:
1、读取彩色图像然后 灰度 = 0.299 * 红色 + 0.587 * 绿色 + 0.114 * 蓝色进行转换 和 调用cvtColor函数cvtColor(srcImg, imgShow, COLOR_BGR2GRAY);几乎一样;
2、直接按照灰度方式读取,余上面二者差距较大

附代码


void writeFile(QString filename ,  QString p_str)
{
    QFile file(filename);

    if (file.open(QIODevice::Append | QIODevice::Text)) {
        // 创建一个 QTextStream 对象,并将文件与之关联
        QTextStream stream(&file);

        // 写入文本数据
        stream << p_str << endl;
        // 关闭文件
        file.close();
    } else {
        qDebug() << "Failed to open file!";
    }
}
void MainWindow::on_pushButton_clicked()
{
    Mat srcImg = imread("D:\\1.jpg");
    if(srcImg.empty())
    {
        QMessageBox::information(this,"警告","图片读取失败,请检查图片路径!");
        return;
    }
    Mat imgShow ;
    cvtColor(srcImg, imgShow, COLOR_BGR2GRAY); // 图像格式转换
    // QImage qImg = QImage((unsigned char*)(imgShow.data), imgShow.cols,
    //                      imgShow.rows, imgShow.cols*imgShow.channels(), QImage::Format_RGB888);
    // ui->label->setPixmap(QPixmap::fromImage(qImg.scaled(ui->label->size(), Qt::KeepAspectRatio)));
    qDebug()<<"通道"<<imgShow.channels()<<endl;
    for(int i=0;i<imgShow.rows;++i)
    {
        uchar*ptr = imgShow.ptr<uchar>(i);

        QString mm = "";

        for(int j =0;j<imgShow.cols;++j)
        {
            //qDebug()<<static_cast<int>(ptr[j*3+0])<< static_cast<int>(ptr[j*3+1])<<static_cast<int>(ptr[j*3+2])<<endl;
            int t1 = static_cast<int>(ptr[j]);
          QString s1 =   QString::number(t1);
          mm+=s1+",";
        }
        writeFile("D:\\1.txt" , mm);
    }


    cv::namedWindow("Display window", cv::WINDOW_AUTOSIZE);
    cv::imshow("Display window", imgShow);
    cv::waitKey(0);

}


void MainWindow::on_pushButton_3_clicked()
{
    Mat imgShow = imread("D:\\1.jpg" , 0);
    if (imgShow.empty()) {
        std::cout << "Could not open or find the image" << std::endl;
        return ;
    }
    qDebug()<<imgShow.channels()<<endl;

    qDebug()<<"通道"<<imgShow.channels()<<endl;
    for(int i=0;i<imgShow.rows;++i)
    {
        uchar*ptr = imgShow.ptr<uchar>(i);

        QString mm = "";

        for(int j =0;j<imgShow.cols;++j)
        {
            int t1 = static_cast<int>(ptr[j]);
            QString s1 =   QString::number(t1);
            mm+=s1+",";
        }
         writeFile("D:\\2.txt" , mm);
    }


    cv::namedWindow("Display window1", cv::WINDOW_AUTOSIZE);
    cv::imshow("Display window1", imgShow);
    cv::waitKey(0);
}


void MainWindow::on_pushButton_4_clicked()
{
    Mat imgShow = imread("D:\\1.jpg" , 1);
    if (imgShow.empty()) {
        std::cout << "Could not open or find the image" << std::endl;
        return ;
    }
    qDebug()<<imgShow.channels()<<endl;

    qDebug()<<"通道"<<imgShow.channels()<<endl;
    Mat imgarr[3];
    split(imgShow ,imgarr );

    for(int i=0;i<imgShow.rows;++i)
    {
        uchar*ptr = imgShow.ptr<uchar>(i);

        QString mm = "";

        for(int j =0;j<imgShow.cols;++j)
        {
           // qDebug()<<static_cast<int>(ptr[j*3+0])<< static_cast<int>(ptr[j*3+1])<<static_cast<int>(ptr[j*3+2])<<endl;
            int t1 = static_cast<int>(ptr[j*3+0]);
            int t2 = static_cast<int>(ptr[j*3+1]);
            int t3 = static_cast<int>(ptr[j*3+2]);
            int dst = 0.299 * t3 + 0.587 * t2 + 0.114 * t1;
            QString s1 =   QString::number(dst);
            mm+=s1+",";
        }
         writeFile("D:\\3.txt" , mm);
    }


    cv::namedWindow("Display window1", cv::WINDOW_AUTOSIZE);
    cv::imshow("Display window1", imgShow);
    cv::waitKey(0);
}

将彩色图转化为灰度图及其原理介绍 本文介绍了彩色图与灰度图,为什么要转化为灰度图,及其转化为灰度图的原理,包含加权平均法与简单平均法,在明白了原理之后,直接使用OpenCV中提供的函数进行图像灰度处理,希望对你有所帮助。 阅读详情

相关推荐

opencv彩色图像转灰度图原理

opencv彩色图像转灰度图原理

doubleintfloat的博客 1782

图像由彩色图转化为灰度图的三种方法

一、原理 对于图像由彩色图转化为灰度图有三种方法 分别为 加权法 均值法 最大值法 加权法就是  GRAY==0.3*R+0.59*G+0.11*B 均值法就是 GRAY==(R+G+B)/3 最大值发就是  max(R,G,B) 二、代码 [filename,pathname]=uigetfile({'*.jpg';'*bmp';'*gif'},'选择原图片'); p

weixin_40202230的博客 2万+

计算机视觉 | 1. 一切的基础: 灰度图像 (读取,转换,像素定位)

01 引言 一切看似复杂的计算机视觉项目,其基础都会回归到单张图片上。能够理解 灰度/彩色图像 的基本原理并将代码用于实际案例是本文的目标。下文将详细介绍如何利用 Python 实现 灰度/彩色图像 的基本处理,主要分为两个部分: 详细原理介绍 Python 代码实战 本文数据代码可以在后台回复「灰度图像」获取 02 原理介绍 计算机实际上是怎么”看“图像数据的呢?图像只是三维现实场景的二维表示,比如现实中的一辆汽车是三维物体,但如果你给汽车拍张照片,我们就得到了它的二维图像。 这张图像包含的信息有

阅读从未停止,输出从未开始 1万+

关于如何使用Python将批次彩色图片转换为灰度图片-详解

本文章主要详细讲解将彩色图片转换为灰度图片,从单个图片转换到批次图片的转换。

qq_37977007的博客 2765

如何将 WORD中将彩色图片变成灰度图 或 黑白图 ?

有的时候,要将WORD中将彩色图片变成灰度图 或 黑白图片。比如,本刊不出彩图,那就要转换成灰度图。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1万+

图像处理基础 || (二) 彩色图像转灰度图像

由于图像处理中的诸多技术如卷积、傅立叶变换、特征值分解等操作均是针对灰度图像,所以如何将彩色图像转化为灰度图像是常用的基本操作。在python中使用不同的库进行此操作的方式也不相同,本部分内容旨在整理出常用的图像处理库中的此类操作。

weixin_40234309的博客 3497

OpenCV-Python 彩色图像转灰度图

本文主要是讲OpenCV-Python对图像进行彩色转灰度图的操作 文章目录前言一、读取图片二、彩色图片转灰度图强烈说明: 前言 这里给出一个OpenCV-Python官方文档的链接 链接: OpenCV-Python官方文档. 一、读取图片 使用函数cv2.imread()读取图像。该映像应位于工作目录中,或者应提供完整的映像路径。 第二个参数是一个标志,用于指定应读取图像的方式。 cv2.IMREAD_COLOR:加载彩色图像。图像的任何透明度都将被忽略。这是默认标志。 cv2.IMREAD_.

m0_50360098的博客 4万+

MATLAB教程:手动实现彩色图像到灰度图像的转换

rgb2gray数字图像处理是IT领域一个非常重要的分支,图像转换的逻辑和算法实现不仅涉及到深厚的理论知识,也需要丰富的实践经验。通过本章节的内容,我们可以对图像处理背后的原理有一个全面的认识,并在实际开发中运用这些知识来提升我们的算法效率和图像处理质量。

weixin_42499004的博客 955

灰度图像和彩色图像的直方图均衡化(python实现)

灰度图像和彩色图像的直方图均衡化(python实现)原理描述直方图均衡化直方图均衡化算法彩色图像HSI模型<->RGB模型代码灰度图像直方图均衡化彩色图像直方图均衡化(内含hsi模型和rgb模型互换)实验结果问题感想 原理描述 直方图均衡化 直方图是图像中像素强度分布的图形表达方式。它统计了每一个强度值所具有的像素个数。直方图均衡化是通过拉伸像素强度分布范围来增强图像对比度的一种方法。...

zhao9428686的博客 1万+

STM32CubeMX的正交编码器encoder

由于最近干活遇到需要获取正交编码的功能,所以返回来研究一下STM32CubeMX的编码器功能,之前也更新过STM32的定时器功能,但是因为之前搞平衡车的正交编码器没有搞清楚原理,就直接用了脉冲输入功能草草了事,现在也算是为之前的年轻买单了,不过看到现有的Encoder说明都比较简单,所以就当是为开发者做贡献了,我研究清楚之后来一篇博客。

ASWaterbenben的博客 1万+

基于FPGA的函数信号发生器设计

设计采用波形查找表和相位累加器的方法实现DDS,查找表的数据位宽为8位,采样点数为4096。波形产生范围是100Hz-20MHz,最小频率间隔为1Hz,用8个数码管显示频率,可产生正弦波、方波、三角波,波形用两个led显示,select信号控制,全灭为正弦波,一亮一灭为方波,全亮为锯齿波。为了使频率和相位便于调节,用3个拨码开关控制步进,用8个led显示状态。

FPGA入门到跑路 5633

Python OpenCV 彩色图像与灰度图像的转换

想不到,今天学习的竟然还是彩色图像与灰度图像的转换。经过前面的学习,你们和我一样,有没有掌握 2 种彩色图像转换成灰度图像的方式,2021年第一天在学习1种。 取经之旅第 8 天彩色图像转换为灰度图像伪彩色图像感谢大佬方向性的指导

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 2万+

ThingsBoard入门实战(七):公共发布和 UI 细节修改

公共发布和 UI 细节修改7.细节修改和公共发布一、公共发布二、UI优化下载运行修改三、下一步还可以做什么?更好的UI更丰富的系统模块 7.细节修改和公共发布 GET到新技能了,想给兄弟们演示,需要给他们每个人一个账号么? 答案肯定是:不需要! ThingsBoard 用 公共发布 解决了这个问题。 一、公共发布 首先我们来看一下路灯设备现在在谁名下? 如下图,路灯都是customerA的, 目前只有它和它的租户可以看到,其他人需要看就需要设为公有。 如图操作: 对于设备详情仪表盘,我们也需要设为公有

AIGC搞起 9116

彩色图像转灰度图像原理python

现在我们所接触到的图像绝大多数都是数字图像,图像数字化后,每个像素点就可以看作是一个小方格,每个小方格里面存储的就是图像的像素信息。如果把一副数字图像抽象出来,就是一个二维矩阵(灰度图)或者三维矩阵(彩色图)。任何颜色都有红、绿、蓝三原色组成。用红、绿、蓝三元组的二维矩阵来表示(这样构成了三个通道),抽象出来一起构成了一个三维数组。

一直小蜗牛,学得慢爬得慢 3880

保姆级教程:用STM32F103C8T6和MAX6675搞定K型热电偶测温(附模拟/硬件SPI双版本代码)

本文提供STM32F103C8T6与MAX6675实现K型热电偶高精度测温的保姆级教程,涵盖硬件连接、SPI驱动实现及模拟SPI方案,并附双版本代码。详细解析温度数据读取、处理及常见问题排查,助力工业控制、实验室设备等场景的稳定测温系统搭建。

weixin_30765505的博客 587

杰理芯片外挂Flash音乐播放功能避坑指南(附FAT文件系统配置)

本文详细解析了杰理芯片外挂Flash实现音乐播放功能的技术要点与常见问题,包括硬件连接、SPI驱动配置、FAT文件系统烧录及音乐播放集成等关键环节。特别针对Flash选型、FAT文件系统配置等易错点提供实用解决方案,帮助开发者高效完成嵌入式音频系统开发。

yhn45678901的博客 833

彩色图像、灰度图像、二值图像和索引图像区别

转自:http://www.sohu.com/a/50526196_196473 彩色图像,每个像素通常是由红(R)、绿(G)、蓝(B)三个分量来表示的,分量介于(0,255)。RGB图像与索引图像一样都可以用来表示彩色图像。与索引图像一样,它分别用红(R)、绿(G)、蓝(B)三原色的组合来表示每个像素的颜色。但与索引图像不同的是,RGB图像每一个像素的颜色值(由RGB三原色表示)直接存放在图像矩...

HWP 2万+

基于STM32设计的4G远程视频侦查小车(图传+远程控制+EMQX+MQTT)(204)

当前设计了一款基于STM32F103ZET6主控芯片和废旧Android手机改造的4G侦查小车。该设计充分利用已有的智能手机硬件资源,实现摄像头画面的实时采集与上传,以及远程控制功能。这样的设计不仅降低了成本,而且充分利用了废旧手机中高性能的硬件资源,如摄像头、4G通信模块和电池等,实现了资源的有效循环利用。

2527

MATLAB中彩色图像转灰度图像 的三种方式(MATLAB程序)

在数字图像中,彩色图像-&gt;灰色图像,一般有以下三种方式:下面就以上三种方式,利用MATLAB软件实现的表达:1、取平均值和仅取Green色2、利用灰度转换公式以上是简易的程序,不足之处,请不吝赐教。...

jamin_liu_90的博客 2万+

Flutter框架GetX从入门到精通第二篇:路由管理-告别繁琐的Navigator

Flutter框架GetX从入门到精通第二篇:告别繁琐的Navigator。本系列将带你从零开始,一步步掌握 GetX 框架的核心功能与实战技巧。

鹏多多的博客 170

分类预测 | MATLAB实现ELM极限学习机多特征分类预测(二分类)

分类预测 | MATLAB实现ELM极限学习机多特征分类预测(二分类)

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 778

彩色图像与灰度图像之间的转换

一.彩色图像简介 在RGB色彩空间,图像深度与色彩的映射关系主要有真彩色、伪彩色和调配色。 真彩色是指在组成一幅彩色图像的每个像素值中,有R,G,B三个基色分量,每个基色分量直接决定显示设备的基色强度,这样产生的彩色称为真彩色,是真实的原图彩色。 伪彩色图像的每个像素值实际上是一个索引值或代码,该代码值作为色彩查找表CLUT中某一项的入口地址,根据该地址可查找出包含实际R,G,B的强度值。这...

weixin_34315485的博客 2837

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

6.Matlab如何将彩色图像转换为灰度图像

6.Matlab如何将彩色图像转换为灰度图像 1.在数字图像中,彩色图像->灰色图像,一般有以下三种方式: 2.下面就以上三种方式,利用Matlab软件实现 2.1取平均值和仅取Green色 2.2 利用灰度转换公式 ...

weixin_43781229的博客 9373

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

BM3D 灰度图像和彩色图像去噪实现

github地址:https://github.com/18150167970/BM3D-color-image 欢迎start(笑)。 首先,上一波原理:https://zhuanlan.zhihu.com/p/46399784 灰度图像方法: 这里引用上述链接的内容: 算法总体流程如图: 主要分为两大步: 第一步,基础估计: 1、对于每个目标图块,在附近寻找最多MAXN1(...

a362682954的博客 7483

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

LabVIEW将彩色图像转换到灰度图像

介绍一个开发的应用程序,用于基于LabVIEW软件环境,在所有支持的色彩空间(RGB、HSI、HSV和HSL)中自动将彩色图像转换为灰阶。• 当转换为来自HSI,HSL和HSV颜色系统的强度,亮度颜色和亮度值颜色分量时,可以获得灰度图像,并可以详细识别单个对象。使用LabVIEW在HSI色彩空间中将颜色转换到灰度图像的已经成功应用为图像分割前的预处理,用于确定蓝纹奶酪中霉菌的分布。应用程序能够通过提取不同颜色系统中的不同组件来可视化将彩色图像转换为单色的结果,这是一个优势,也是比较所获得结果的机会。

bjcyck的博客 2033
上一篇: opencv彩色图像转灰度图原理
下一篇: static关键字作用汇总
越甲八千
博客等级 码龄11年 2953粉丝 553原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值