imread函數+cvtColor()函數


加載圖像(用cv::imread)

  • imread功能是加載圖像文件成為一個Mat對象,其中第一個參數表示圖像文件名稱
  • 第二個參數,表示加載的圖像是什么類型,支持常見的三個參數值

  1. IMREAD_UNCHANGED (<0) 表示加載原圖,不做任何改變
  2. IMREAD_GRAYSCALE ( 0)表示把原圖作為灰度圖像加載進來
  3. IMREAD_COLOR (>0) 表示把原圖作為RGB圖像加載進來

注意:OpenCV支持JPG、PNG、TIFF等常見格式圖像文件加載

顯示圖像 (cv::namedWindos 與cv::imshow)

  • namedWindos功能是創建一個OpenCV窗口,它是由OpenCV自動創建與釋放,你無需取銷毀它。
  • 常見用法namedWindow("Window Title", WINDOW_AUTOSIZE)
  • WINDOW_AUTOSIZE會自動根據圖像大小,顯示窗口大小,不能人為改變窗口大小
  • WINDOW_NORMAL,跟QT集成的時候會使用,允許修改窗口大小。
  • imshow根據窗口名稱顯示圖像到指定的窗口上去,第一個參數是窗口名稱,第二參數是Mat對象

保存圖像(cv::imwrite)

  • 保存圖像文件到指定目錄路徑
  • 只有8位、16位的PNG、JPG、Tiff文件格式而且是單通道或者三通道的BGR的圖像才可以通過這種方式保存
  • 保存PNG格式的時候可以保存透明通道的圖片
  • 可以指定壓縮參數

  1. 第一個參數:將要另保存圖像的名稱,可以自己定義名稱。
  2. 第二個參數:你要要保存的圖像名稱,是目前已經存在的圖像。
  3. 第三個參數: 來設置對於圖像格式的參數,一般省略,不寫

opencv提供了cvtColor()函數來實現這些功能。首先看一下cvtColor函數定義:

C++: void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 );
1
參數解釋:
. InputArray src: 輸入圖像即要進行顏色空間變換的原圖像,可以是Mat類
. OutputArray dst: 輸出圖像即進行顏色空間變換后存儲圖像,也可以Mat類
. int code: 轉換的代碼或標識,即在此確定將什么制式的圖片轉換成什么制式的圖片,后面會詳細將
. int dstCn = 0: 目標圖像通道數,如果取值為0,則由src和code決定

代碼如下:

//首先是導入相關函數(類似於包java import....)
#include<opencv2\opencv.hpp>
#include<iostream>
#include<math.h>

//域名控件(類似java導入包后,無需在每個對象中添加包名例如:本來要寫cv::Mat 添加域名空間后,只需寫Mat)
using namespace cv;

//主函數
int main(int argc, char** argv)
{
    //創建一個Mat對象並在里面寫入圖片數據(圖片即存儲像素點的矩陣數組)
    Mat srcImage = imread("E:\\VS2015Opencv\\vs2015\\project\\picture\\01.jpg");
    //判斷Mat是否有數據。無,打印消息,退出,有就繼續(C和java都差不多)
    if (srcImage.empty()) {
        printf("couldn't load image");
        //暫停
        getchar();
        //返回-1,退出
        return -1;
    }
    //顯示原圖像
    namedWindow("原圖像", WINDOW_AUTOSIZE);
    imshow("原圖像", srcImage);

    //將圖像轉換為灰度圖,采用CV_前綴
    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;
}

 




免責聲明!

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



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