opencv彩色图像转灰度图原理

opencv彩色图像转灰度图原理

在OpenCV中,将彩色图像转换为灰度图像的基本原理是使用颜色空间转换的方法。具体来说,OpenCV提供了cvtColor函数,它可以将图像从一个颜色空间转换到另一个。

对于从BGR颜色空间(OpenCV中的默认彩色图像格式)转换到灰度,通常采用以下公式:

灰度 = 0.299 * 红色 + 0.587 * 绿色 + 0.114 * 蓝色

这个转换是根据人类视觉系统对不同颜色的敏感度来加权平均RGB通道的值的。

有三种方式可以将彩色图像转成灰度图
1、直接imread("1.jpg" , 0);直接读取灰度图像
2、读取彩色图像然后 灰度 = 0.299 * 红色 + 0.587 * 绿色 + 0.114 * 蓝色进行转换
3、调用cvtColor函数cvtColor(srcImg, imgShow, COLOR_BGR2GRAY);

cpp 复制代码
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)));
    cv::namedWindow("Display window", cv::WINDOW_AUTOSIZE);
    cv::imshow("Display window", imgShow);
    cv::waitKey(0);

}


void MainWindow::on_pushButton_3_clicked()
{
    Mat image = imread("D:\\1.jpg" , 0);
    if (image.empty()) {
        std::cout << "Could not open or find the image" << std::endl;
        return ;
    }
    qDebug()<<image.channels()<<endl;
    cv::namedWindow("Display window1", cv::WINDOW_AUTOSIZE);
    cv::imshow("Display window1", image);
    cv::waitKey(0);
}
相关推荐
阿里云大数据AI技术13 分钟前
EMR Serverless StarRocks + DLF Paimon 多模态数据湖检索
人工智能
文青的青37 分钟前
不写一行代码,用 WorkBuddy 搭建并上线个人静态博客
人工智能
IT_陈寒40 分钟前
Redis连接池泄漏那次,我差点把生产环境搞崩了
前端·人工智能·后端
Dawson Zhu40 分钟前
从空间 Scaling 到时间 Scaling
人工智能·语言模型·架构·aigc·agi
阿里云大数据AI技术1 小时前
本体如何落地?阿里云 Milvus 把企业文档变成知识图谱和 Wiki
人工智能
QXWZ_IA2 小时前
公安视频专网如何与定位数据融合?架构与实施要点
人工智能
小林ixn2 小时前
GraphRAG 实战:用 Neo4j 知识图谱,让 RAG 从“找货“进化到“梳理关系“
人工智能·知识图谱·neo4j
敖老师2 小时前
Dify 连局域网 Ollama 的两个坑:docker0 网段撞车,和请求里少掉的那个参数
人工智能
MocMoc2 小时前
从 0 到 1:把 Dify Chatflow 接进一个 qiankun 中后台
人工智能
民乐团扒谱机2 小时前
【微实验】NSGA-II(非支配排序遗传算法)——解决多目标优化问题的“自然选择模拟器”
linux·人工智能·算法