歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> OpenCV入門教程之一圖像的讀寫與顯示

OpenCV入門教程之一圖像的讀寫與顯示

日期:2017/3/1 9:45:28   编辑:Linux編程

一、工具篇

工欲善其事,必先利其器。學習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來顯示一幅自己喜歡的圖像。

#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++接口是:

void imshow(const string& winname, InputArray mat);


第一參數是窗口名,第二個參數是要顯示的圖像。

4,與OpenCV相關於類或者函數都在CV命名空間裡。

5,想讓上面程序正確顯示出你的圖像,請把圖像放在正確的路徑,或者直接寫絕對路徑。

上面程序中已經用到了圖像的讀入函數imread、圖像的顯示函數imshow,那麼圖像的寫入函數imwrite就不會顯示陌生了。

imwrite("output.jpg",image);


它的第一個參數是寫圖像的路徑,第二個參數是要寫入的圖像。

三、創建一個圖像

在我們的第一個OpenCV程序中,用Mat來聲明了一個圖像,聲明後圖像的大上為0*0的,當然我們也可以初始化一個固定大小的圖像。

cv::Mat image(240,320,CV_8U,cv::Scalar(100));

上面的代碼創建了一個灰度圖像,大小是320*240,圖像上每個點的數據類型是無符號8位的,並用100填充所有像素點。
你可以把CV_8U換成CV_8U3來創建一個三通道的彩色圖像。或者用CV_16U創建無符號16位的。

四、賦值與復制

如果我們想得到一個圖像的副本並進行了下面的操作。

Mat newImage=Image;

如果我們對newImage進行修改或操作,則會直接影響Image圖像,因為newImage與Image共用了數據內容。

想要真正得到一個副本可以這樣做:

Mat newImage;

Image.copyTo(newImage);//方法一

Mat newImage=image.clone();//方法二

很多時候,我們並不想得到原圖像的復制,但是要創建一個跟原圖像大小相同的圖像。下面的代碼可以完成這樣的功能。

Mat newImage;newImage.create(Image.size(),Image.type());

Copyright © Linux教程網 All Rights Reserved