使用OpenCv将一幅图像转换为灰度图像
灰度图像在实际应用中也不少,转换为灰度图像比较简单,关键函数:cvCvtColor
cvCvtColor(IplImage* src, IplImage* dst, CV_BRG2GRAY);
注意:
最后一个参数为CV_BRG2GRAY,表示将BRG图片(彩色图片)转换为灰度图片(黑白)。
参数src、dst必须事先分配好内存空间!
下面是代码:
- #include <stdio.h>
- #include <stdlib.h>
- #include <opencv/cv.h>
- #include <opencv/highgui.h>
- int toGray(IplImage* img)
- {
- IplImage* dst = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);//用原图像指针创建新图像
- if(NULL == dst)
- return -1;
- cvCvtColor(img, dst, CV_BGR2GRAY);//转换颜色空间 我试过,如果没有这一步 得到的图像将是全黑
- cvNamedWindow("Gray", CV_WINDOW_AUTOSIZE);
- cvShowImage("Gray", dst);
- cvSaveImage("Gray.jpg", dst, 0);//保存
- cvWaitKey(0);
- cvReleaseImage(&dst);
- cvDestroyWindow("Gray");
- return 1;
- }
- int main(int argc, char** argv)
- {
- if(argc != 2)
- {
- printf("Usage:test xxx.jpg\n");
- return 1;
- }
- IplImage* img = cvLoadImage(argv[1],
- CV_LOAD_IMAGE_ANYDEPTH|CV_LOAD_IMAGE_ANYCOLOR); //如果想要载入最真实的图像,选择CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR。
- if(NULL == img)
- {
- printf("Image load fail!\n");
- return 2;
- }
- cvNamedWindow("RGB", CV_WINDOW_AUTOSIZE);
- cvShowImage("RGB", img);
- toGray(img);
- cvReleaseImage(&img);
- cvDestroyWindow("RGB");
- }
原图像:
目标图像: