【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