在上一節(jié)的OpenCV簡(jiǎn)介和配置中,我們寫(xiě)了第一個(gè)OpenCV程序,加載了一張圖片并進(jìn)行顯示。下面先給出上一節(jié)的第一個(gè)OpenCV程序并進(jìn)行說(shuō)明呛占。
// OpenCVTest.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。
#include "stdafx.h"
#include <opencv2/opencv.hpp>
int _tmain(int argc, _TCHAR* argv[])
{
cv::Mat img = cv::imread("J:\\VS2010Projects\\OpenCVTest\\OpenCVTest\\smallpi.jpg");
cv::imshow("hello world",img);
cv::waitKey(0);
return 0;
}
cv::imread函數(shù)
命名空間cv下的函數(shù)imread的原型為
Mat imread(const string& filename, int flags)
- 函數(shù)返回一個(gè)Mat類(lèi)型的對(duì)象懦趋。
- 第一個(gè)參數(shù)指定圖片的路徑晾虑。
- 第二個(gè)參數(shù)指定圖片加載格式。
第二個(gè)參數(shù)flags可以為下面三個(gè)中的一個(gè)仅叫。
CV_LOAD_IMAGE_UNCHANGED (以RGBA格式加載帜篇,一個(gè)像素占4byte內(nèi)存)
CV_LOAD_IMAGE_GRAYSCALE (以灰度圖像的格式加載,一個(gè)像素占1byte內(nèi)存)
CV_LOAD_IMAGE_COLOR (以RGB格式加載诫咱,一個(gè)像素占3byte內(nèi)存)
CV_LOAD_IMAGE_COLOR 是默認(rèn)的圖片加載格式坠狡。
Mat類(lèi)
cv::imread函數(shù)讀取圖片后的就返回一個(gè)Mat類(lèi)型的對(duì)象。Mat類(lèi)對(duì)象保存著所加載圖片的信息遂跟。
- Mat類(lèi)的data屬性為指向圖像數(shù)值數(shù)組的第一個(gè)元素的unsigned char類(lèi)型的指針逃沿。每一個(gè)矩陣元素為1byte的0~255的整數(shù)婴渡。
- 當(dāng)為RGB格式加載圖像時(shí),圖像數(shù)值數(shù)組的格式為 B值-G值-R值-B值......, 即數(shù)值數(shù)組的第一個(gè)元素為第一個(gè)像素的藍(lán)色值凯亮, 數(shù)值數(shù)組的第二個(gè)元素為第一個(gè)像素的綠色值边臼,數(shù)值數(shù)組的第三個(gè)元素為第一個(gè)像素的紅色值....
- Mat類(lèi)的rows()方法獲得圖像像素的行數(shù),cols()方法獲得圖像像素的列數(shù)假消。
Mat類(lèi)還有許多有用的屬性和方法柠并,以后用到時(shí)再作說(shuō)明。
cm::imshow函數(shù)
cm::imshow函數(shù)的原型為
void imshow(const string &winname, cv::InputArray mat);
- 第一個(gè)參數(shù)指定應(yīng)用程序的名稱(chēng)富拗。
- 第二個(gè)參數(shù)為一個(gè)Mat類(lèi)型的對(duì)象臼予。
cm:; waitKey函數(shù)
waitKey在這里的作用是等待用戶(hù)鍵盤(pán)或鼠標(biāo)的輸入,使得應(yīng)用程序不會(huì)閃一下就退出了啃沪。
頭文件引入
上面的OpenCV程序引入頭文件的形式如下
#include <opencv2/opencv.hpp>
實(shí)際上粘拾,opencv.hpp文件的作用就是幫我們把所有的OpenCV頭文件引入進(jìn)來(lái)。opencv.hpp的源碼如下创千。
#ifndef __OPENCV_ALL_HPP__
#define __OPENCV_ALL_HPP__
#include "opencv2/core/core_c.h"
#include "opencv2/core/core.hpp"
#include "opencv2/flann/miniflann.hpp"
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/photo/photo.hpp"
#include "opencv2/video/video.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/ml/ml.hpp"
#include "opencv2/highgui/highgui_c.h"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/contrib/contrib.hpp"
#endif
這是一種頭文件引入時(shí)偷懶的作法缰雇。引入所有的文件可能會(huì)增加程序的大小。
小結(jié)
- 對(duì)第一個(gè)OpenCV程序中的imread追驴、imshow械哟、waitKey函數(shù)進(jìn)行的小小的說(shuō)明。
- 說(shuō)明了OpenCV庫(kù)的引入方式殿雪。