OpenCV之颜色空间转换ctvcolor

一、创建工程:文件--->新建项目或文件--->Non qt project---->plaine C++ Application.....ios

 

https://blog.csdn.net/keith_bb/article/details/53470170小程序

二、在.rpo中添加openCV支持函数

INCLUDEPATH += E:/software/opencv-3.4.2/build/install/include/opencv \
 E:/software/opencv-3.4.2/build/install/include/opencv2 \
 E:/software/opencv-3.4.2/build/install/include

 LIBS += -L E:/software/opencv-3.4.2/build/install/x86/mingw/bin/libopencv_*.dll

三、main.cppui

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>

using namespace std;
using namespace cv;
int main()
{
    Mat srcImage = imread("F:/MyCode/test0004.bmp");
    if(!srcImage.data)
    {
        cout << "image load failure" << endl;
        return false;
    }

    namedWindow("原图像",WINDOW_NORMAL);
    /*
     * 一、经过指定的名字,建立一个能够做为图像和进度条的容器窗口。若是具备相同名称的窗口已经存在,则函数不作任何事情。
     * 二、调用destroyWindow()或者destroyAllWindows()函数来关闭窗口,并取消以前分配的与窗口相关的全部内存空间。
     * 对于代码量不大的简单小程序来讲,咱们彻底没有必要手动调用上述的destroyWindow()或者destroyAllWindows()函数,
     * 由于在退出时,全部的资源和应用程序的窗口会被操做系统会自动关闭。
     * 三、void namedWindow(const string& winname,int flags=WINDOW_AUTOSIZE );
     *   第一个参数,const string&型的name,即填被用做窗口的标识符的窗口名称。
     *   第二个参数,int 类型的flags ,窗口的标识,能够填以下的值:
     *       WINDOW_NORMAL设置了这个值,用户即可以改变窗口的大小(没有限制)
     *       WINDOW_AUTOSIZE若是设置了这个值,窗口大小会自动调整以适应所显示的图像,而且不能手动改变窗口大小。
    */
    imshow("原图像",srcImage);

    Mat grayImage;
    cvtColor(srcImage, grayImage, CV_BGR2GRAY);     //将图像转换为灰度图
    namedWindow("灰度图",WINDOW_AUTOSIZE);
    imshow("灰度图",grayImage);

    //将图像转换为HSV,采用COLOR_前缀
    Mat HSVImage;
    cvtColor(srcImage, HSVImage, COLOR_BGR2HSV);    //将图像转换为HSV图
    namedWindow("HSV",WINDOW_AUTOSIZE);
    imshow("HSV",HSVImage);



    waitKey(0);

    return 0;
}

void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 );
. InputArray src: 输入图像,能够是Mat类 
. OutputArray dst: 输出图像,也能够Mat类 
. int code: 转换的代码或标识,即在此肯定将什么制式的图片转换成什么制式的图片
. int dstCn = 0: 目标图像通道数,若是取值为0,则由src和code决定spa

函数的做用是将一个图像从一个颜色空间转换到另外一个颜色空间,可是从RGB向其余类型转换时,必须明确指出图像的颜色通道操作系统

在opencv中,其默认的颜色制式排列是BGR而非RGB。因此对于24位颜色图像来讲,前8-bit是蓝色,中间8-bit是绿色,最后8-bit是红色。常见的R,G,B通道的取值范围为: 
. 0-255 :CV_8U类型图片 
. 0-65535: CV_16U类型图片 
. 0-1: CV_32F类型图片 .net

对于线性变换来讲,这些取值范围是可有可无的。可是对于非线性转换,输入的RGB图像必须归一化到其对应的取值范围来或得最终正确的转换结果,例如从RGB->L*u*v转换。若是从一个8-bit类型图像不通过任何缩放(scaling)直接转换为32-bit浮点型图像,
函数将会以0-255的取值范围来取代0-1的取值范围,因此在使用cvtColor函数以前须要对图像进行缩放以下:code

img *= 1./255;
cvtColor(img, img, CV_BGR2Luv);blog

相关文章
相关标签/搜索