opencv學習筆記——Scalar數據結構的理解


首先看一下Scalar的定義

    typedef struct Scalar  
    {  
        double val[4];  
    }Scalar;

可以看到,Scalar是一個由長度為4的數組作為元素構成的結構體,Scalar最多可以存儲四個值,沒有提供的值默認是0。

Scalar常用的使用場景如下:

Mat M(7,7,CV_32FC2,Scalar(1,3));

上面的代碼表示:創建一個2通道,且每個通道的值都為(1,3),深度為32,7行7列的圖像矩陣。CV_32F表示每個元素的值的類型為32位浮點數,C2表示通道數為2,Scalar(1,3)表示對矩陣每個元素都賦值為(1,3),第一個通道中的值都是1,第二個通道中的值都是3.

實例1:

 

#include <iostream>  
#include <opencv2/highgui/highgui.hpp>  
#include <opencv2/core/core.hpp>  
#include <opencv2/imgproc/imgproc.hpp>  
#include <stdio.h>  
using namespace std;  
using namespace cv;  
void scalar_demo1(){  
    Mat M(4,4,CV_32FC2,Scalar(1,3));  
    cout<<M<<endl;  
}  
void scalar_demo2(){  
    Mat M(4,4,CV_32FC3,Scalar(1,2,3));  
    cout<<M<<endl;  
}  
void scalar_demo3(){  
    Mat M(4,4,CV_32FC4,Scalar(1,2,3));  
    cout<<M<<endl;  
}  
int main(void)  
{  
    //resize_img();  
    //convert_color_space();  
    scalar_demo1();  
    cout<<"**********************************"<<endl;  
    scalar_demo2();  
    cout<<"**********************************"<<endl;  
    scalar_demo3();  
    return 0;  
} 

 

運行以上代碼輸出如下,可以發現最后一個矩陣是4通道的,但是我們在初始化的時候只給出了三個通道的值,所以第四個通道的值都默認為0。

實例2:

    #include <iostream>  
    #include <opencv2/highgui/highgui.hpp>  
    #include <opencv2/core/core.hpp>  
    #include <opencv2/imgproc/imgproc.hpp>  
    #include <stdio.h>  
    using namespace std;  
    using namespace cv;  
      
    void scalar_demo4(){  
        Mat blue_m(256,256,CV_8UC3,Scalar(255,0,0));  
        Mat green_m(256,256,CV_8UC3,Scalar(0,255,0));  
        Mat red_m(256,256,CV_8UC3,Scalar(0,0,255));  
        imshow("Blue",blue_m);  
        waitKey(0);  
        imshow("Green",green_m);  
        waitKey(0);  
        imshow("Red",red_m);  
        waitKey(0);  
          
    }  
    int main(void)  
    {  
        scalar_demo4();  
        return 0;  
    }  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM