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