1. 程式人生 > >【OpenCV入門】第一篇 OpenCV概述及入門

【OpenCV入門】第一篇 OpenCV概述及入門

本篇主要介紹OpenCV的基本概念和相關的基本函式。

一、OPenCV的概念和結構

OpenCV:開源的計算機視覺庫,一般用C和C++ 編寫

OpenCV的結構共分為五個部分,分別是影象處理和視覺演算法(CV)、機器學習庫(ML)、影象和視訊輸入/輸出庫(HighGUI)、基本結構和演算法,XML支援,繪圖函式(CXCORE)以及CVAUx模組,其中前四個模組結構如圖所示:


在該圖中並沒有包括CVAUx,CVAUx中一般存放即將被淘汰的演算法與函式(如基於嵌入式的隱式馬爾可夫模型的人臉識別演算法),同時也有一些實驗性的演算法和函式(如背景和前景的分割)。

二、一些常用的函式

顯示影象

cvLaodImage():cvLaodImg()函式是一個高層呼叫介面,它通過檔名確認被載入的檔案型別,並且該函式將自動分配影象資料 結構所需的記憶體

cvNamedWindow():cvNamedWindow()函式也是一個高層呼叫介面,由HIghGUI庫提供,用於在螢幕上建立一個視窗,將被顯  示的影象包含於視窗中,該函式的第一個引數指定了視窗的標題,第二個引數定義了視窗的屬性,可設定為                               0(預設值)或者cv_Window_AUTOSIZE,設定為0時,視窗大小不因影象大小而改變;當設定為                                               cv_Window_AUTOSIZE時,隨著影象大小而改變

cvShowImage():cvShowImage()用於在一個已經建立的視窗顯示影象,第一個引數確定在哪個已存在的視窗顯示,當該方法被   呼叫時,該視窗將被重新繪製,影象也會顯示在視窗中

cvWaitKey():cvWaitKey()函式的作用是使程式暫停,當引數設定為一個正數時,程式將暫停一段時間;當引數為負數或0時,程   將等待使用者觸發按鈕操作

cvReleaseImage():cvRealeaseImage()用於執行釋放記憶體操作

cvDestoryWindow():cvDestoryWindow()用於銷燬視窗

播放AVI檔案

cvCreateFileCapture():cvCrearteFileCapter()通過引數設定確定要讀入的AVI檔案

cvQueryFrame():cvQueryFrame()的引數為從vCapter結構的指標,將下一幀視訊載入記憶體,返回一個對應當前幀的指標

視訊播放控制

cvSetCaptureProperty():cvSetCaptureProperty()允許設定Capture物件的各種屬性,CV_CAP_PROP_POS_FRAMES表示以幀數 讀取資料,可以AVI——RATIO代替FRAMES,此時表示按照視訊長度比例讀取視訊

cvGetCaptureProperty():cvGetCVaptureProperty()表示從Capture中查詢資料

cvCreateTrackbar():藉助cvCreateTrackbar(),我們設定滾動條的名稱,並且確定滾動條的所屬視窗

cvCreateCameraCapture():cvCreateCameraCapture()通過引數設定確定讀入的攝像裝置

cvCreateVideoWriter():cvCraterVdieoWriter()用於建立視訊裝置逐幀將視訊流寫入視訊檔案,寫入結束後由cvReleaseVdieoWriter()釋放資源,第一個引數確定新建視訊檔案的名稱,第二個引數是視訊壓縮的編碼格式,後兩個引數是指定播放的幀率和視訊影象的大小

三、小試牛刀——對一張圖片進行變換

首先我們舉一個簡單的例子,用於顯示一個影象,那麼,

程式碼如下:

#include"highgui.h"

int main(int argc,char** argv) {
	IplImage* img = cvLoadImage("E:/1.jpg");

	cvNamedWindow("E1", 0);

	cvShowImage("E1", img);

	cvWaitKey(0);

	cvReleaseImage(&img);

	cvDestroyWindow("E1");

最終的執行效果如下:


接著,我們對整個影象進行復雜一點的變換:

#include"highgui.h"

IplImage* doPyrDown(IplImage* in) {
	assert(in->width % 2 == 0 && in->height % 2 == 0);
	IplImage* out = cvCreateImage(cvSize(in->width / 2, in->height / 2), in->depth, in->nChannels);
	cvPyrDown(in, out);
	return out;
}

IplImage* doCanny(IplImage* in, double lowThresh, double highThesh, double aperture) {
	if (in->nChannels != 1)
		return 0;
	IplImage* out = cvCreateImage(cvSize(in->width, in->height), IPL_DEPTH_8U, 1);
	cvCanny(in, out, lowThresh, highThesh, aperture);
	return out;
}

int main(int argc, char** argv) {
	IplImage* in;
	IplImage* out;
	in = cvLoadImage("E:/1.jpg");
	out = doPyrDown(in);
	out = doPyrDown(out);
	out = doCanny(out, 10, 100, 3);
	cvNamedWindow("E2", 0);
	cvShowImage("E2", out);
	cvWaitKey(0);
	cvReleaseImage(&out);
	cvDestroyWindow("E2");
}
這一個部分到這裡就結束了!

相關推薦

OpenCV入門第一 OpenCV概述入門

本篇主要介紹OpenCV的基本概念和相關的基本函式。一、OPenCV的概念和結構OpenCV:開源的計算機視覺庫,一般用C和C++ 編寫OpenCV的結構共分為五個部分,分別是影象處理和視覺演算法(CV)、機器學習庫(ML)、影象和視訊輸入/輸出庫(HighGUI)、基本結構

設計模式第一概述、耦合、UML、七大原則,詳細分析總結(基於Java)

![](//p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/879cf035c7c044469f3589610c4ba7f8~tplv-k3u1fbpfcp-zoom-1.image) 迷茫了一週,一段時間重複的 CRUD ,著實讓我有點煩悶,最近打算將這些技術棧系列的文

Spring Cloud第一 Service Discovery | 服務發現

Eureka 提供服務的註冊,服務可以通過註冊到Eureka然後被其他應用呼叫。 看到Spring Cloud 的文件裡面是先講的是Spring Cloud Config ,為了方便,或者說參考其他大佬的教程,我也會把Config放到後面寫。 word &

倔強青銅第一

[0.0] Biu~ 輸入一個數,輸出它的位數,每一位是什麼,並按順序輸出。 #include<stdio.h> int Count(int n) { int j; int i; for(i=1;n!=0;i++) { j=n%10;

OpenCV入門指南第一 安裝OpenCV

                【OpenCV第一篇】安裝OpenCV本篇主要介紹如何下載OpenCV安裝程式,如何在VS2008下安裝配置OpenCV,文章最後還介紹了一個使用OpenCV的簡單小例子。一.OpenCV的下載下載完成後,雙擊執行exe,選擇輸出目錄,我選擇的是D:\opencv。然後解壓縮就

OpenCV入門學習第一

      接觸到影象處理,不免要用到OpenCV,豐富的影象處理函式,不僅在追求高效能(基於C實現)上而且開源庫更是方便開發者不斷擴充套件openCV庫。是計算機視覺研究方向的必要開發工具。由於剛剛接觸OpenCV,本文主要是是對於OpenCV一些簡單例項的測試與實現。

Go 入門學習第一關於 Go 的部落格--Go 爬蟲初體驗

一、寫在前面   其實早就該寫這一篇部落格了,為什麼一直沒有寫呢?還不是因為忙不過來(實際上只是因為太懶了)。不過好了,現在終於要開始寫這一篇部落格了。在看這篇部落格之前,可能需要你對 Go 這門語言有些基本的瞭解,比如基礎語法之類的。話不多說,進入正題。   二、Go 環境配置 1.安裝配置   

組成原理第一章 計算機系統概述

表示 運算 傳遞 intro 指令 掌握 周期 style 主存 重點掌握:MAR和MDR的含義,主存容量大小、CPU執行時間的計算,性能指標CPI、MIPS、主頻等等。 1. 存儲單元:CPU訪問存儲器的基本單位,每個單元有一個地址。通常是字節大小的整數倍。 2. CPU

學習記錄第一章 資料庫設計-《SQL Server資料庫設計和開發基礎視訊課程》

一、課程筆記 1.1  軟體開發週期   (1)需求分析階段   分析客戶的業務和資料處理需求。 (2)概要設計階段   設計資料庫的E-R模型圖,確認需求資訊的正確和完整。 /*   E-R圖:實體-關係圖(Entity Relationship Diagram),提供了

opencv基礎linux系統opencv的安裝

  操作步驟 1.下載對應版本(以3.3.1為例)的原始碼並解壓; 2.編譯安裝; /opt/opencv-3.3.1$ cd build/ /opt/opencv-3.3.1/build$ sudo cmake .. /opt/opencv-3.3.1/build$ sudo m

如何實現backbone元件化開發 第一:無元件所帶來的問題

元件化開發優勢 從2015以來前後端分離的模式被越來越多的公司所使用,隨著業務程式碼複雜度的上升,程式碼也維護成本也隨之上升。對於一個複雜的web應用,我們可以使用分而治之的方式來降低系統的複雜度,也就是標題中所說的元件化開發。元件化開發可以把系統分割多個子模組,每個模組完成單一的功

小卒Ubuntu使用第一雙系統安裝完成,Ubuntu使用時觸控板和Wifi禁用問題

一、觸控板不可用 解決: 執行命令,安裝libinput apt install xserver-xorg-input-libinput修改配置,增加幾項:這裡的配置項不一定是90開頭 sudo vim /usr/share/X11/xorg.conf.d/90-libinput.conf

任務排程系統第一:大資料任務排程框架

1.前言 任務排程系統在大資料平臺架構中扮演著比較重要的角色。下圖是引自網易的猛獁大資料平臺lambda架構圖。 其中的Azkaban就是其任務排程元件。概括來說,任務排程在大資料平臺中所扮演的角色主要有: 任務編排:對任務流按照一定的邏輯串起來。這在大資料開發中

opencv學習完全基於opencv的雙目景深與測距的實現

目錄 1 說明 執行環境: 1.windows10 2.opencv 2.4.9 3.visual studio 2013 4.兩顆微軟HD-3000攝像頭 2 雙目測距原理 先說一下自己對雙目視覺實現原理的理解,不保證都是正確的: 首先就是

機器學習C++與OpenCV、Tensorflow-python聯合呼叫

  上一篇我介紹了C++呼叫Python的入門方法。這一篇我講述C++與OpenCV、Tensorflow-python聯合呼叫的一次成功的實驗過程。   C++通過python呼叫tensorflow,比呼叫C++版本的tensorflow的優勢在於:ten

計算機視覺關於用opencv 設定攝像頭讀解析度問題的若干說明

關於用opencv 設定攝像頭讀解析度問題的若干說明 1 問題最初起因 我想充分利用相機高解析度來提高視角,故用opencv直接設定攝像機解析度。不幸的我倒黴出現問題。 VideoCapture類讀AVI視訊可以設定高解析度1294*964,讀攝像頭為啥不能設定1294*

linux學習筆記--第一基於nanopim2a的環境搭建,uboot編譯下載

          接觸一個星期,搭建了虛擬機器,雙系統,行動硬碟ubuntu , 總結下來, 行動硬碟的系統最方便,硬碟可以分為2個分割槽,一個裝系統, 一個放檔案(windows也可以識別),感覺還是挺爽的。           以下是這幾天折騰u-boot的一

OpenCV學習筆記 第一 顯示影象

OpenCV學習筆記 第一篇 顯示影象 關於opencv的配置,大家自己找教程配置,本筆記側重於對opencv基礎入門的學習,本節學習opencv的一些簡單語句,如何利用opencv來載入影象,顯示影象,來學習一些簡單基礎的opencv的語句,推薦一本ope

影象處理Ubuntu安裝OpenCV 3.0以及Python介面

系統環境 Ubuntu系統版本:Ubuntu Kylin 14.04 (32位) OpenCV軟體版本:opencv-3.0.0 OpenCV下載 進入OpenCV官網 在右側選擇 OpenCV for Linux/Mac 安裝步驟 安

pygame遊戲編程第一-----創建一個窗口

屏幕 surface 這就是 程序 set_mode exit span get while 下面我們一起來創建一個背景為藍色的窗口作為遊戲編程的開始: import sys import pygame def creat_screen(): #初始化py