2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 在opencv中如何将一张彩色图像转换为灰度图像

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

时间:2021-09-25 20:34:24

相关推荐

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

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

在imread函数中指定flag为IMREAD_GRAYSCALE

#include <stdio.h>#include <assert.h>#include <iostream>#include <opencv2/opencv.hpp>#include <opencv2/core.hpp>#include <opencv2/imgcodecs.hpp>#include <opencv2/highgui.hpp>using namespace cv;using namespace std;int main(int argc, char **argv) {Mat img = imread("a.jpg", IMREAD_GRAYSCALE);imwrite("out.jpg", img);return 0;}

2 使用cvtColor(src, dst, COLOR_BGR2GRAY):

#include <iostream>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>#include <sys/ioctl.h>#include <linux/videodev2.h>#include <string.h>#include <sys/mman.h>#include <assert.h>#include <opencv2/opencv.hpp>#include <opencv2/core.hpp>#include <opencv2/imgcodecs.hpp>#include <opencv2/highgui.hpp>using namespace std;using namespace cv;int main() {Mat img = imread("in.jpg", IMREAD_UNCHANGED);Mat img2;cvtColor(img, img2, COLOR_BGR2GRAY);imwrite("out.jpg", img2);return 0;}

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

以下是代码:

#include <iostream>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>#include <sys/ioctl.h>#include <linux/videodev2.h>#include <string.h>#include <sys/mman.h>#include <assert.h>#include <opencv2/opencv.hpp>#include <opencv2/core.hpp>#include <opencv2/imgcodecs.hpp>#include <opencv2/highgui.hpp>using namespace std;using namespace cv;int main(int argc, char **argv) {Mat img = imread("in.jpg", IMREAD_UNCHANGED);Mat gray(img.size(), CV_8UC1);uchar *data = gray.data;uchar *p = img.data;for (int i = 0; i < img.size().height * img.size().width; i++) {data[i] = (*(p++) + *(p++) + *(p++)) / 3;}imwrite("out.jpg", gray);return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。