OPENCV3.3---introduction

Opencv 2.* 和 1. * 的區(qū)別:2.* 主要是c++的接口顾复,1.* 主要是c接口。

API概念

1. cv命名空間
using namespace cv;
2. 自動(dòng)內(nèi)存管理

Mat等大的數(shù)據(jù)類型都是通過(guò)引用計(jì)數(shù)管理內(nèi)存衷模。你可以利用Mat::clone真的進(jìn)行復(fù)制。

// 創(chuàng)建一個(gè)8M的矩陣
Mat A(1000, 1000, CV_64F);
// 創(chuàng)建同一個(gè)矩陣的一個(gè)引用蒲赂,是即時(shí)生效的
Mat B = A;
// 創(chuàng)建對(duì)A的第三行引用阱冶,同樣不進(jìn)行復(fù)制
Mat C = B.row(3);
// 真的復(fù)制
Mat D = B.clone();
// 復(fù)制A的第五行到第3行
B.row(5).copyTo(C);
// now let A and D share the data; after that the modified version
// of A is still referenced by B and C.
A = D;
// now make B an empty matrix (which references no memory buffers),
// but the modified version of A will still be referenced by C,
// despite that C is just a single row of the original A 即A仍然不會(huì)釋放
B.release();
// finally, make a full copy of C. As a result, the big modified
// matrix will be deallocated, since it is not referenced by anyone 即 A 被釋放掉
C = C.clone();

對(duì)于其他沒(méi)有把自動(dòng)銷毀考慮在內(nèi)的數(shù)據(jù)類型,可以利用Ptr模板滥嘴。

//不是這樣:T* ptr = new T(...);
Ptr<T> ptr(new T(...));
Ptr<T> ptr = makePtr<T>(...);

這樣就可以進(jìn)行引用計(jì)數(shù)了木蹬。

3. 輸出的自動(dòng)分配
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
using namespace cv;
int main(int, char**)
{
    VideoCapture cap(0);
    if(!cap.isOpened()) return -1;
    Mat frame, edges;
    namedWindow("edges",1);
    for(;;)
    {
        cap >> frame;
        cvtColor(frame, edges, COLOR_BGR2GRAY);
        GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);
        Canny(edges, edges, 0, 30, 3);
        imshow("edges", edges);
        if(waitKey(30) >= 0) break;
    }
    return 0;
}

frame,edges是自動(dòng)分配的輸出矩陣若皱。除非類型镊叁、大小變化,否則只分配一次走触。
有個(gè)別方法不符合自動(dòng)分配機(jī)制晦譬,比如 cv::mixChannels, cv::RNG::fill 。你需要自己事先分配互广。

4. 飽和運(yùn)算

常用的像素類型是uchar就支持飽和運(yùn)算:I(x,y)=min(max(round(r),0),255)敛腌。opencv代碼是I.at<uchar>(y, x) = saturate_cast<uchar>(r)卧土。對(duì)于8s,16s和u類型同樣適用像樊。不適用32位整數(shù)尤莺。

5. 固定的像素類型,有限的模板

只有少數(shù)的簡(jiǎn)單模板生棍。像generic Ptr<> implementation , saturate_cast<>()還有一些像素接觸操作炼幔。
基礎(chǔ)數(shù)據(jù)類型:

8-bit unsigned integer (uchar)
8-bit signed integer (schar)
16-bit unsigned integer (ushort)
16-bit signed integer (short)
32-bit signed integer (int)
32-bit floating-point number (float)
64-bit floating-point number (double)

枚舉:enum { CV_8U=0, CV_8S=1, CV_16U=2, CV_16S=3, CV_32S=4, CV_32F=5, CV_64F=6 };

Mat mtx(3, 3, CV_32F); // make a 3x3 floating-point matrix
Mat cmtx(10, 1, CV_64FC2); // make a 10x1 2-channel floating-point
                           // matrix (10-element complex vector)
Mat img(Size(1920, 1080), CV_8UC3); // make a 3-channel (color) image
                                    // of 1920 columns and 1080 rows.
Mat grayscale(image.size(), CV_MAKETYPE(image.depth(), 1)); // make a 1-channel image of
                                                            // the same size and same
                                                            // channel type as img

越復(fù)雜的算法支持的數(shù)據(jù)類型越少音五,如人臉識(shí)別只支持8位的灰度或彩色圖像。

6. InputArray and OutputArray

Many OpenCV functions process dense 2-dimensional or multi-dimensional numerical arrays. Usually, such functions take cppMat as parameters, but in some cases it's more convenient to use std::vector<> (for a point set, for example) or Matx<> (for 3x3 homography matrix and such).To avoid many duplicates in the API, special "proxy" classes have been introduced. The base "proxy" class is InputArray.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市窖认,隨后出現(xiàn)的幾起案子直撤,更是在濱河造成了極大的恐慌眼坏,老刑警劉巖嚷掠,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異首量,居然都是意外死亡壮吩,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門加缘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鸭叙,“玉大人,你說(shuō)我怎么就攤上這事拣宏∩虮矗” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵勋乾,是天一觀的道長(zhǎng)宋下。 經(jīng)常有香客問(wèn)我,道長(zhǎng)辑莫,這世上最難降的妖魔是什么学歧? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮各吨,結(jié)果婚禮上枝笨,老公的妹妹穿的比我還像新娘。我一直安慰自己揭蜒,他們只是感情好横浑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著屉更,像睡著了一般伪嫁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上偶垮,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼似舵。 笑死脚猾,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的砚哗。 我是一名探鬼主播龙助,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蛛芥!你這毒婦竟也來(lái)了提鸟?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤仅淑,失蹤者是張志新(化名)和其女友劉穎称勋,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體涯竟,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赡鲜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了庐船。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片银酬。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖筐钟,靈堂內(nèi)的尸體忽然破棺而出揩瞪,到底是詐尸還是另有隱情,我是刑警寧澤篓冲,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布李破,位于F島的核電站,受9級(jí)特大地震影響纹因,放射性物質(zhì)發(fā)生泄漏喷屋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一瞭恰、第九天 我趴在偏房一處隱蔽的房頂上張望屯曹。 院中可真熱鬧,春花似錦惊畏、人聲如沸恶耽。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)偷俭。三九已至,卻和暖如春缰盏,著一層夾襖步出監(jiān)牢的瞬間淹遵,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工负溪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留透揣,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓崖堤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子麸粮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容