彩色图像转灰度图像
转换原理
彩色转灰度,通常会使用下面的一个心理学公式:( Matlab 和 OpenCV 中使用的也是该公式)。
Gray = 0.2989*R + 0.5870*G + 0.1140*B
创建文件
首先新建一个 QT 文件,这里创建了有默认代码的 QT 文件,然后打开 pro 文件,为其配置 opencv,在默认生成的 pro 文件中加入 OpenCV 库等相关文件的路径,按下 Ctrl + S 保存:
编写代码
main.cpp:
#include <QCoreApplication>
#include <opencv2/opencv.hpp>
using namespace cv;
void grayImageShow(Mat& input, Mat& output)
{
for (int i = 0; i < input.rows; ++i)
{
for (int j = 0; j < input.cols; ++j)
{
output.at<uchar>(i, j) = saturate_cast<uchar>(0.114 * input.at<Vec3b>(i, j)[0] + 0.587 * input.at<Vec3b>(i, j)[1] + 0.2989 * input.at<Vec3b>(i, j)[2]);
}
}
namedWindow("equation", 0);//创建窗口
resizeWindow("equation", 500, 300); //创建一个500*300大小的窗口
imshow("equation", output);
}
int main(int argc, char* argv[])
{
QCoreApplication a(argc, argv);
Mat src, gray, dst;
gray = imread("/mnt/hgfs/My Share/冬景.jpg", IMREAD_GRAYSCALE);//由imread()得到的灰度图像
src = imread("/mnt/hgfs/My Share/冬景.jpg");
dst.create(src.rows, src.cols, CV_8UC1);
namedWindow("colorful", 0);//创建窗口
resizeWindow("colorful", 500, 300); //创建一个500*300大小的窗口
imshow("colorful", src);
namedWindow("gray", 0);
resizeWindow("gray", 500, 300);
imshow("gray", gray);
grayImageShow(src, dst);
waitKey(0);
return a.exec();
}
运行结果
下面是输出结果,colorful 为原图像,gray 为通过 imread()获得的灰度图,equation 为通过计算公式得到的灰度图。