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");

}

 

posted @ 2016-11-20 22:01  Steve_Nash  阅读(200)  评论(0编辑  收藏  举报