Opencv2與opencv1的區別

2021-06-23 07:02:57 字數 2947 閱讀 4332

一:opencv2與opencv1的區別:

opencv1.0

版本於2023年面世,主要基於c語言。2023年發布opencv2,主要基於c++。此時opencv庫被劃分成多個模組,這些模組被編譯成庫檔案後,位於lib資料夾中。主要有以下模組(版本1的結構見我的這篇blog:

opencv_core

模組:包含核心功能,尤其是底層資料結構和演算法函式。

opencv_improc

模組:包含影象處理函式。

opencv_highgui

opencv_features2d

模組:包含興趣點檢測子,描述子以及興趣點匹配框架。

opencv_calib3d

模組:包含相機標定,雙目幾何估計以及立體視覺函式。

opencv_video

模組:包含運動估算,特徵跟蹤以及前景提取函式與類。

opencv_objdetect

模組:包括物體檢測函式,如臉部和行人檢測。

庫中還包含其它的工具模組,如機器學習(opencv_ml),計算幾何(opencv_flann),第三方**(opencv_contrib)等。這些模組都對有乙個單獨的標頭檔案(位於include資料夾)。推薦的宣告方式如下:

#include

#include

#include

而#include "cv.h"這是舊的**方式,那是庫還沒有被劃分為模組。

二:讀取、顯示和儲存

(1)**:

[cpp]view plain

copy

print?

#include

#include

#include

#include

using

namespace std;

using

namespace cv;

int main()

cout << "image size: "

<< image.size().height << ","

<< image.size().width << endl; //size()返回的是乙個結構體

namedwindow("show");

imshow("show", image); // 顯示

cout << "image size: " << image.size().height << "," << image.size().width << endl; //size()返回的是乙個結構體

namedwindow("show");

imshow("show", image); // 顯示

<1>opencv2中用於儲存影象資料為mat型別,而在opencv1中用iplimage(詳細見我的這篇blog:優點在於

mat是乙個類,定義的類型別可以自動分配和釋放記憶體空間,而iplimage需手動為其分配和釋放記憶體空間,當影象較多時,可能會有偏差,造成記憶體洩露。

<2>image.data

是指向已分配的記憶體塊的指標,當沒有載入進來,則為null。

<3>image.size()返回的是乙個結構體,實際上包括width和height這兩個成員變數。

<4>flip(image,result,0); //其中正數表示水平反轉,0表示垂直反轉,負數表示既有水平又有垂直反轉。

(3)結果:

三:深淺拷貝

(1) 淺拷貝:

mat b;

b = image ; // 第一種方式

mat c(image); // 第二種方式

這兩種方式稱為淺copy,是由於它們有不同的矩陣頭,但是它們共享記憶體空間,即指向乙個矩陣。當影象矩陣發生變化時,兩者相關聯,都會變化。

(2) 深拷貝:

mat b,c;

b = image.clone(); // 第一種方式

image.copyto(c); // 第二種方式

深拷貝是真正的copy了乙個新的影象矩陣,此時image,b,c三者相互沒有影響。

四:iplimage裝換為mat

// 其中false為淺拷貝,而true為深拷貝,預設為false。此時注意需要釋放iplimage

當然opencv提供了另外一種指標類,無需手動釋放,但現在已經不用了,可以使用它來封裝iplimage指標:

OPENCV 1 學習筆記

灰度圖 2維矩陣 彩色圖 3維矩陣 ps 目前大部分裝置都是用無符號 8 位整數 型別為 cv 8u 表示畫素亮度 mat類定義 class cv exports mat 單通道影象 元素型別一般為 8u 即 8 位無符號整數 也可以是 16s 32f 等 這些型別可以直接用 uchar short...

opencv3 與opencv2不同之處

由於opencv3的主體實在opencv2的基礎上進行的修改,部分opencv2的程式仍然可以在opencv3下執行。但是opencv3也做了部分的修改。網上關於這些的資料也不太多,在學習過程中遇到了一些問題,很是糾結無法解決,所以就在自己看opencv3時就總結了一些不同記錄下來,希望有別人有所幫...

opencv3 與opencv2不同之處

由於opencv3的主體實在opencv2的基礎上進行的修改,部分opencv2的程式仍然可以在opencv3下執行。但是opencv3也做了部分的修改。網上關於這些的資料也不太多,在學習過程中遇到了一些問題,很是糾結無法解決,所以就在自己看opencv3時就總結了一些不同記錄下來,希望有別人有所幫...