您的位置:首页 > 科技 > IT业 > 三种方式可以将彩色图像转成灰度图对比

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

2024/10/5 16:25:41 来源:https://blog.csdn.net/doubleintfloat/article/details/142150781  浏览:    关键词:三种方式可以将彩色图像转成灰度图对比

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

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);
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com