OpenCV例程之基本影象讀入與顯示
阿新 • • 發佈:2018-11-10
OpenCV是Intel®開源計算機視覺庫。它由一系列 C 函式和少量 C++ 類構成,實現了影象處理和計算機視覺方面的很多通用演算法。
1. OpenCV與數字影象
在使用OpenCV做視覺或數字影象預處理時,需要讀入相機採集來的影象或視訊資訊。影象資料的獲取主要有以下幾個步驟:
- 光學相機(CCD/CMOS)採集影象訊號;
- 影象採集卡將連續的影象訊號轉換成計算機能夠識別和處理的數字訊號,即取樣、量化操作;
- 經處理的數字訊號通過源編碼、壓縮、通道編碼、調製、解調、解碼、復原等操作傳輸並存儲在計算機中;
- 計算機軟體再讀取儲存在硬碟上的影象資訊,進行下一步處理。
因此,利用OpenCV對視訊和影象資訊進行讀取和顯示操作尤為重要。
2. C語言版本
/*********************************************************************** * OpenCV C - example ***********************************************************************/ #include "cv.h" #include "highgui.h" int main( int argc, char** argv ) { IplImage* pImg; //宣告IplImage指標 //載入影象 if( argc == 2 && (pImg = cvLoadImage( argv[1], 1)) != 0 )//[[此處的argc==2是否需要改成argc==1?我改了之後才能執行成功。求大牛解惑]] // wmzzzz : 在"屬性"|"debug"|裡的command arguments 里加入引數(一個路徑:要開啟的檔案路徑) 這時 argc==2 就合理了...可以試試多加幾個 { cvNamedWindow( "Image", 1 );//建立視窗 cvShowImage( "Image", pImg );//顯示影象 cvWaitKey(0); //等待按鍵 cvDestroyWindow( "Image" );//銷燬視窗 cvReleaseImage( &pImg ); //釋放影象 return 0; } return -1; }
函式說明:
cvLoadImage( filename, -1 ); 預設讀取影象的原通道數
cvLoadImage( filename, 0 );強制轉化讀取影象為灰度圖
cvLoadImage( filename, 1 );讀取彩色圖
3. C++版本
#include "stdafx.h" #include <string> #include <opencv2\opencv.hpp> using namespace cv; using namespace std; int main() { string imagename = "lena.jpg"; //此處需要填寫絕對地址,測試時使用相對地址會出錯。 //讀入影象 Mat img_r = imread(imagename); //如果讀入影象失敗 if(img.empty()) { return -1; } //建立視窗 namedWindow("image",1); //顯示影象 imshow("image", img_r); //等待按鍵,按鍵盤任意鍵返回 waitKey(); return 0; //string imagename = "lena.jpg"; 處是可以使用相對地址,使用環境為OpenCV 2.4.3 //圖片為meinv.jpg置於程式碼檔案所在資料夾的上一級資料夾中,string imagename = "..\\meinv.jpg" 圖片可正常顯示。 //需提醒注意的是 雙引號“” 中出現的第一個 斜槓 \ 被視作轉義字元 }
C++版本的好處
- 在於可以儘量避免使用指標這種危險的東西了。
- 另一個好處便在於,不用費心去release資源了,因為在其destructor裡面,系統會自動幫你搞定。
4. Python版本
import cv2 as cv
#讀取影象,支援 bmp、jpg、png、tiff 等常用格式
img = cv.imread("c:\course\ch1\lena.jpg")
#建立視窗並顯示影象
cv.namedWindow("Image")
cv.imshow("Image",img)
cv.waitKey(0)
#釋放視窗
cv.destroyAllWindows()