//包含OpenCV的头文件
//参照github https://github.com/yoyoyo-yo/Gasyori100knock
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
//使用OpenCV的命名空间
using namespace cv;
//将彩色影像转换为灰度影像
//转换公式为
//Y = 0.2126 R + 0.7152 G + 0.0722 B.
//频道改变
int main()
{
//读取一幅影像
Mat Src = imread("C:/Users/GuSheng/Desktop/标准测试图片/imori.jpg", IMREAD_COLOR);
//如果影像为空的话,直接返回
if (Src.empty())
{
return 0;
}
//获取影像的行和列
int iWidth = Src.cols;
int iHeight = Src.rows;
//创建结果影像,
Mat Dst = Mat(iHeight, iWidth, CV_8UC1);
for (int i=0;i<iHeight;++i)
{
for (int j=0;j<iWidth;++j)
{
//需要注意的一个地方是OpenCV读取彩色影像的是BGR的顺序
//B颜色值
unsigned char B = Src.at<Vec3b>(j, i)[0];
unsigned char G = Src.at<Vec3b>(j, i)[1];
unsigned char R = Src.at<Vec3b>(j, i)[2];
Dst.at<unsigned char>(j, i) = 0.2126*R + 0.7152*G + 0.0722*B;
}
}
//创建显示原始影像和处理结果影像的窗口
namedWindow("Src", WINDOW_AUTOSIZE);
namedWindow("Dst", WINDOW_AUTOSIZE);
//显示两幅影像
imshow("Src", Src);
imshow("Dst", Dst);
//等待按键按下的时候,继续下一条语句
waitKey(0);
//销毁窗口
destroyWindow("Src");
destroyWindow("Dst");
return 0;
}
原影像 结果影像