一、工具篇
工欲善其事,必先利其器。學習OpenCV,肯定少不於基本的程式設計工具與OpenCV庫。在Windows平臺下你可以選擇Visual Studio、CodeBlock等,當然你也可以選擇在Linux平臺,用VI、codeBlock都是可以的。程式設計平臺的選擇看個人愛好以及專案的開發環境。然後是OpenCV庫,你可以在這裡下載到最新的版本:http://opencv.org/,最近的版本已經到了2.4.7,但是OpenCV2.0以上版本差別都不算太大。關於怎麼安裝OpenCV,本文就不再詳說了,此類教程實在太多,百度一下類似:VS2012+openCV2.4.6應該能找到你想要的結果。
二、第一個OpenCV程式
相比於“第一個C語言程式”或者“第一個Java程式”都以Hello,World!這種俗套的例程,我們的第一個OpenCV來顯示一幅自己喜歡的影象。
1 2 3 4 5 6 7 8 9 10 11 12 |
#include<opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> int main() { cv::Mat image; image=cv::imread("../cat.png"); cv::namedWindow("cat"); cv::imshow("cat",image); cv::waitKey(5000); return 0; } |
關於上面的程式有以下幾點要說明:
- 1,core.hpp於OpenCV的一些基礎資料結構相關,highgui.hpp和openCV的一些介面相關,如顯示影象的視窗。
- 2,Mat是OpenCV裡最基本的一個類,它用來表示影象。
- 3,imshow是用來顯示影象的函式,它的C++介面是:
1 |
void imshow(const string& winname, InputArray mat); |
第一引數是視窗名,第二個引數是要顯示的影象。
4,與OpenCV相關於類或者函式都在CV名稱空間裡。
5,想讓上面程式正確顯示出你的影象,請把影象放在正確的路徑,或者直接寫絕對路徑。
上面程式中已經用到了影象的讀入函式imread、影象的顯示函式imshow,那麼影象的寫入函式imwrite就不會顯示陌生了。
1 |
imwrite("output.jpg",image); |
它的第一個引數是寫影象的路徑,第二個引數是要寫入的影象。
三、建立一個影象
在我們的第一個OpenCV程式中,用Mat來宣告瞭一個影象,宣告後影象的大上為0*0的,當然我們也可以初始化一個固定大小的影象。
1 |
cv::Mat image(240,320,CV_8U,cv::Scalar(100)); |
上面的程式碼建立了一個灰度影象,大小是320*240,影象上每個點的資料型別是無符號8位的,並用100填充所有畫素點。
你可以把CV_8U換成CV_8U3來建立一個三通道的彩色影象。或者用CV_16U建立無符號16位的。
四、賦值與複製
如果我們想得到一個影象的副本並進行了下面的操作。
1 |
Mat newImage=Image; |
如果我們對newImage進行修改或操作,則會直接影響Image影象,因為newImage與Image共用了資料內容。
想要真正得到一個副本可以這樣做:
1 2 3 |
Mat newImage; Image.copyTo(newImage);//方法一 Mat newImage=image.clone();//方法二 |
很多時候,我們並不想得到原影象的複製,但是要建立一個跟原影象大小相同的影象。下面的程式碼可以完成這樣的功能。
1 2 |
Mat newImage; newImage.create(Image.size(),Image.type()); |