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

相關文章
相關標籤/搜索