一: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時就總結了一些不同記錄下來,希望有別人有所幫...