OpenCV
RGB转灰度图
IplImage* cvCreateImage( CvSize size, int depth, int channels );
创建图像首地址,并分配存储空间。
void cvCvtColor( const CvArr* src, CvArr* dst, int code );
将数组的通道从一个颜色空间转换另外一个颜色空间;该code来实现不同类型的颜色空间转换。比如CV_BGR2GRAY表示转换为灰度图,CV_BGR2HSV将图片从RGB空间转换为HSV空间。其中当code选用CV_BGR2GRAY时,dst需要是单通道图片。当code选用CV_BGR2HSV时,对于8位图,需要将rgb值归一化到0-1之间。这样得到HSV图中的H范围才是0-360,S和V的范围是0-1。
cvLoadImage:将图像文件加载至内存;
#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"); }