OPENCV里面有很多函数可以调用得到灰度图。这里不调用函数,编写由彩色图变为灰度图的代码
源码如下:
#include <iostream>
#include "opencv.hpp"
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
using namespace std;
void salt(cv::Mat image, int n)
//读出RGB像素值
{
uchar* data = image.ptr<uchar>(0);
uchar b = 0, g = 0, r = 0;
for (int i = 0; i < image.rows; i++)
{
for ( int j = 0; j < image.cols ; j++)
{
r = data[i * 3 + j * image.cols * 3];
g = data[i * 3 + j * image.cols * 3+1];
b = data[i * 3 + j * image.cols * 3+2];
uchar gray = (r + g + b) / 3;
data[i * 3 + j * image.cols * 3]=gray;
data[i * 3 + j * image.cols * 3+1] = gray;
data[i * 3 + j * image.cols * 3+2] = gray;
}
}
}
int main()
{
cv::Mat image = cv::imread("E:\\tutu\\tiger.jpg");
//读入我的小老虎图片,绝对路径
cv::imshow("raw_picture", image);
//显示窗口名字,第一次显示原图
salt(image, 30000);
//传入参数
//cv::namedWindow("Image_salted");
cv::imshow("Image_salted", image);
//显示窗口名字,第二次显示出函数处理过后的图片
cv::waitKey(0);
}
实现的效果图,由彩色图变为灰度图: