在opencv中如何将一张彩色图像转换为灰度图像

1 直接以灰度格式读取然后保存:

在imread函数中指定flag为 IMREAD_GRAYSCALE

#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace cv;
using namespace std;
#define SIZE 400
/**
 *Mat img = imread("a.jpg", IMREAD_UNCHANGED);
 *	Mat img(size, CV_8UC3, Scalar(255, 255, 255));
 *
 */

int main(int argc, char **argv) {
	Mat img = imread("a.jpg", IMREAD_GRAYSCALE);
	imwrite("out.jpg", img);
	namedWindow("opencv", WINDOW_FREERATIO);
	imshow("111", img);
	int k = waitKey(0);
	return 0;
}

2 将原图像的RGB值相加然后除以3。

以下是代码:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace cv;
using namespace std;
#define SIZE 400
/**
 *Mat img = imread("a.jpg", IMREAD_UNCHANGED);
 *	Mat img(size, CV_8UC3, Scalar(255, 255, 255));
 *
 */

int main(int argc, char **argv) {
	Mat img = imread("a.jpg", IMREAD_UNCHANGED);
//	cout<
	Mat gray(img.size(), CV_8UC1);
	uchar data[img.size().width * img.size().height];
	uchar *p = img.data;
	for (int i = 0; i < img.size().height * img.size().width; i++) {
		data[i] = (*p + *(p + 1) + *(p + 2)) / 3;
		p++;
		p++;
		p++;
	}
	gray.data = data;
	imwrite("out.jpg", gray);
	namedWindow("opencv", WINDOW_FREERATIO);
	imshow("111", gray);
	int k = waitKey(0);
	return 0;
}

你可能感兴趣的:(opencv,opencv,计算机视觉,人工智能)