程序及分析
/*
* FileName : read.cpp
* Author : xiahouzuoxin @163.com
* Version : v1.0
* Date : Tue 13 May 2014 07:34:25 PM CST
* Brief :
*
* Copyright (C) MICL,USTB
*/
#include <cv.h>
#include <highgui.h>
using namespace cv;
using namespace std;
int main(int argc, char **argv)
{
Mat img;
img = imread(argv[1], 1);
if (argc != 2 || !img.data) {
cout<<"No image data.\n"<<endl;
return -1;
}
namedWindow("Display Image", CV_WINDOW_AUTOSIZE);
imshow("Display Image", img);
waitKey(0);
return 0;
}
1.
包含和,cv.h中包括了OpenCV的核心功能,包括Mat等數據結構,highgui.h主要包含用於圖片顯示的接口。
2.
Mat是OpenCV中特有的矩陣類,Mat.data是數據指針,通過判斷數據指針是否為NULL可以確定是否讀入圖片數據。
3.
namedWindow有兩個參數,其函數原型如下:
CV_EXPORTS_W void namedWindow(const String& winname, int flags=WINDOW_AUTOSIZE);
第一個參數winname是窗口名,是窗口對象的唯一標識,就和人的名字一樣,因此,不能同時有兩個相同名字的窗口!flags設置窗口屬性,缺省參數值為WINDOW_AUTOSIZE=CV_WINDOW_AUTOSIZE=1。
4.
和matlab中的一樣,有木有,第一個參數表示我要在哪個窗口顯示,第二參數表示我要顯示那幅圖像,用腳趾頭想一想,是不是有這兩個參數就能知道在哪顯示什麼了?
5.
還有一個waitKey(int delay=0)表示圖片顯示窗口保留時間,單位為ms,當delay=0時,按下鍵盤上任意按鍵才會關閉圖像顯示的窗口
6.
用於編譯上述程序的Makefile如下:
TARG=read
SRC=read.cpp
LIB=-L/usr/local/lib/
INC=-I/usr/local/include/opencv/
CFLAGS=-g
$(TARG):$(SRC)
g++ -o $@ ${CFLAGS} $(LIB) $(INC) -lopencv_core -lopencv_highgui $^
.PHONY:clean
clean:
-rm $(TARG) -f
我將OpenCV安裝到默認目錄/usr/local下,因此在使用g++編譯時要包含鏈接庫(-L/usr/local/lib/)和頭文件(-I/usr/local/include/opencv/)
注:在OpenCV基礎篇中都使用該格式的Makefile文件,因此後面的例程都可以拷貝後直接使用,只需要修改TARG和SRC參數即可!
效果
--------------------------------------分割線 --------------------------------------
Ubuntu Linux下安裝OpenCV2.4.1所需包 http://www.linuxidc.com/Linux/2012-08/68184.htm
Ubuntu 12.04 安裝 OpenCV2.4.2 http://www.linuxidc.com/Linux/2012-09/70158.htm
CentOS下OpenCV無法讀取視頻文件 http://www.linuxidc.com/Linux/2011-07/39295.htm
Ubuntu 12.04下安裝OpenCV 2.4.5總結 http://www.linuxidc.com/Linux/2013-06/86704.htm
Ubuntu 10.04中安裝OpenCv2.1九步曲 http://www.linuxidc.com/Linux/2010-09/28678.htm
基於QT和OpenCV的人臉識別系統 http://www.linuxidc.com/Linux/2011-11/47806.htm
--------------------------------------分割線 --------------------------------------