日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenCV学习笔记(四十六)——FAST特征点检测features2D OpenCV学习笔记(四十七)——VideoWriter生成视频流highgui OpenCV学习笔记(四十八)——PCA算

發布時間:2025/3/21 编程问答 32 豆豆

OpenCV學習筆記(四十六)——FAST特征點檢測features2D

特征點檢測和匹配是計算機視覺中一個很有用的技術。在物體檢測,視覺跟蹤,三維常年關鍵等領域都有很廣泛的應用。這一次先介紹特征點檢測的一種方法——FAST(features from accelerated segment test)。很多傳統的算法都很耗時,而且特征點檢測算法只是很多復雜圖像處理里中的第一步,得不償失。FAST特征點檢測是公認的比較快速的特征點檢測方法,只利用周圍像素比較的信息就可以得到特征點,簡單,有效。

FAST特征檢測算法來源于corner的定義,這個定義基于特征點周圍的圖像灰度值,檢測候選特征點周圍一圈的像素值,如果候選點周圍領域內有足夠多的像素點與該候選點的灰度值差別夠大,則認為該候選點為一個特征點。


其中I(x)為圓周上任意一點的灰度,I(p)為圓心的灰度,Ed為灰度值差得閾值,如果N大于給定閾值,一般為周圍圓圈點的四分之三,則認為p是一個特征點。

為了獲得更快的結果,還采用了額外的加速辦法。如果測試了候選點周圍每隔90度角的4個點,應該至少有3個和候選點的灰度值差足夠大,否則則不用再計算其他點,直接認為該候選點不是特征點候選點周圍的圓的選取半徑是一個很重要的參數,這里我為了簡單高效,采用半徑為3,共有16個周邊像素需要比較。為了提高比較的效率,通常只使用N個周邊像素來比較,也就是大家經常說的FAST-N。我看很多文獻推薦FAST-9,作者的主頁上有FAST-9、FAST-10、FAST-11、FAST-12,大家使用比較多的是FAST-9和FAST-12。上個圖說明的更形象一些


OpenCV里對FAST的使用也非常簡單,先聲明一組特征點,構建FAST特征檢測,接下來調用detect函數檢測圖像中的特征點,最后把特征點繪制到圖片上。上代碼說的清楚些

[cpp] view plain copy
  • #include?<opencv2/core/core.hpp>??
  • #include?<opencv2/features2d/features2d.hpp>??
  • #include?<opencv2/highgui/highgui.hpp>??
  • ??
  • #include?<vector>??
  • ??
  • using?namespace?cv;??
  • ??
  • void?main()??
  • {??
  • ????Mat?image;??
  • ????image?=?imread("church01.jpg");??
  • ????//?vector?of?keyPoints??
  • ????std::vector<KeyPoint>?keyPoints;??
  • ????//?construction?of?the?fast?feature?detector?object??
  • ????FastFeatureDetector?fast(40);???//?檢測的閾值為40??
  • ????//?feature?point?detection??
  • ????fast.detect(image,keyPoints);??
  • ????drawKeypoints(image,?keyPoints,?image,?Scalar::all(255),?DrawMatchesFlags::DRAW_OVER_OUTIMG);??
  • ????imshow("FAST?feature",?image);??
  • ????cvWaitKey(0);??
  • }??

  • 最后上一張效果圖


    OpenCV學習筆記(四十七)——VideoWriter生成視頻流highgui?

    首先要先糾正個誤區,我見有人用OpenCV做多媒體開發,真的是很搞笑,OpenCV這東西再強大,這方面也不行的,之所以把視頻讀取寫入這部分做的強大一些,也是為了方便大家做視頻處理的時候方便些,而且這部分也是基于vfw和ffmpeg二次開發的,功能還是很弱的。一定要記住一點,OpenCV是一個強大的計算機視覺庫,而不是視頻流編碼器或者解碼器。希望大家不要走入這個誤區,可以把這部分簡單單獨看待。目前,OpenCV只支持avi的格式,而且生成的視頻文件不能大于2GB,而且不能添加音頻。如果你想突破這些限制,我建議你最好還是看看ffMpeg,而不是浪費時間在OpenCV上。不過也可以利用視頻后期合成工具制作。閑言少敘,進入重點VideoWriter類。

    這個類是highgui交互很重要的一個工具類,可以方便我們容易的將圖片序列保存成視頻文件。類內成員函數有構造函數,open,isOpened,write(也可以用<<),使用還是很簡單的。

    使用很簡單,先調用構造函數確定文件的名稱,格式,幀率,幀大小,是否彩色。其中格式作為第二個參數,OpenCV提供的格式是未經過壓縮的,目前支持的格式如下:

    CV_FOURCC('P', 'I', 'M', '1') = MPEG-1 codec

    CV_FOURCC('M', 'J', 'P', 'G') = motion-jpeg codec
    CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec?
    CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec?
    CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec?
    CV_FOURCC('U', '2', '6', '3') = H263 codec?
    CV_FOURCC('I', '2', '6', '3') = H263I codec?

    CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec

    然后就<<不停的把image傳進去就行啦,太簡單了,我都不好意思寫了。上代碼: [cpp] view plain copy
  • #include?<opencv2/core/core.hpp>??
  • #include?<opencv2/highgui/highgui.hpp>??
  • ??
  • using?namespace?cv;??
  • ??
  • void?main()??
  • {??
  • ????VideoCapture?capture(0);??
  • ????VideoWriter?writer("VideoTest.avi",?CV_FOURCC('M',?'J',?'P',?'G'),?25.0,?Size(640,?480));??
  • ????Mat?frame;??
  • ??????
  • ????while?(capture.isOpened())??
  • ????{??
  • ????????capture?>>?frame;??
  • ????????writer?<<?frame;??
  • ????????imshow("video",?frame);??
  • ????????if?(cvWaitKey(20)?==?27)??
  • ????????{??
  • ????????????break;??
  • ????????}??
  • ????}??
  • }?


  • OpenCV學習筆記(四十八)——PCA算法實現core

    PCA(principal component analysis,主成分分析),我想是大家用的最多的降維手段,對于PCA的理解,我想大神們都各有各的絕招,可以應用的場合也非常多。下面就介紹一下OpenCV中PCA這個類,因為常用,所以這個類相對OpenCV而言顯得比較獨立,放在了core這部分中。

    PCA類的成員函數包括構造函數、運算符重載()、project、backProject這幾個函數,還包括成員變量eigenvectors、eigenvalues、mean。使用也很方便。比如我要計算一組向量的PCA,我們只需要定義個PCA實例,獲得主成分,調用project測試新樣本,也可以再調用backProject重建原始向量,是project的一個逆運算。

    在實際使用我我發現了一個bug,構造函數和運算符重載()函數的第三個參數只能使用0或者1(分別對應CV_PCA_DATA_AS_ROW和CV_PCA_DATA_AS_COL),但調用對應的宏卻編譯無法通過,不知道大家是否也是一樣的情況

    下面結合一個實例分析:

    2001年全國各地區消費情況指數

    地區 食品X1 衣著X2 家庭設備X3 醫療保健X4 交通通信X5 娛樂教育X6 居住X7

    北京 101.5 100.4 97.0 98.7 100.8 114.2 104.2
    天津 100.8 93.5 95.9 100.7 106.7 104.3 106.4
    河北 100.8 97.4 98.2 98.2 99.5 103.6 102.4
    山西 99.4 96.0 98.2 97.8 99.1 98.3 104.3
    內蒙古 101.8 97.7 99.0 98.1 98.4 102.0 103.7
    遼寧 101.8 96.8 96.4 92.7 99.6 101.3 103.4
    吉林 101.3 98.2 99.4 103.7 98.7 101.4 105.3
    黑龍江 101.9 100.0 98.4 96.9 102.7 100.3 102.3
    上海 100.3 98.9 97.2 97.4 98.1 102.1 102.3
    江蘇 99.3 97.7 97.6 101.1 96.8 110.1 100.4
    浙江 98.7 98.4 97.0 99.6 95.6 107.2 99.8
    安徽 99.7 97.7 98.0 99.3 97.3 104.1 102.7
    福建 97.6 96.5 97.6 102.5 97.2 100.6 99.9
    江西 98.0 98.4 97.1 100.5 101.4 103.0 99.9
    山東 101.1 98.6 98.7 102.4 96.9 108.2 101.7
    河南 100.4 98.6 98.0 100.7 99.4 102.4 103.3
    湖北 99.3 96.9 94.0 98.1 99.7 109.7 99.2
    湖南 98.6 97.4 96.4 99.8 97.4 102.1 100.0
    廣東 98.2 98.2 99.4 99.3 99.7 101.5 99.9
    廣西 98.5 96.3 97.0 97.7 98.7 112.6 100.4
    海南 98.4 99.2 98.1 100.2 98.0 98.2 97.8
    重慶 99.2 97.4 95.7 98.9 102.4 114.8 102.6
    四川 101.3 97.9 99.2 98.8 105.4 111.9 99.9
    貴州 98.5 97.8 94.6 102.4 107.0 115.0 99.5
    云南 98.3 96.3 98.5 106.2 92.5 98.6 101.6
    西藏 99.3 101.1 99.4 100.1 103.6 98.7 101.3
    陜西 99.2 97.3 96.2 99.7 98.2 112.6 100.5
    甘肅 100.0 99.9 98.2 98.3 103.6 123.2 102.8
    青海 102.2 99.4 96.2 98.6 102.4 115.3 101.2
    寧夏 100.1 98.7 97.4 99.8 100.6 112.4 102.5
    新疆 104.3 98.7 100.2 116.1 105.2 101.6 102.6?

    我們用PCA來分析這些向量的對消費水平的貢獻,代碼實現如下:

    [cpp] view plain copy
  • #include?<opencv2/core/core.hpp>??
  • #include?<iostream>??
  • #include?<fstream>??
  • ??
  • using?namespace?cv;??
  • using?namespace?std;??
  • ??
  • void?main(int?argc,?char**?argv)??
  • {??
  • ????const?int?SAMPLE_NUM?=?31;??
  • ????const?int?VECTOR_NUM?=?7;??
  • ????fstream?fp;??
  • ????string?temp;??
  • ????char*?filename?=?argv[1];??
  • ????Mat?pcaSet(SAMPLE_NUM,?VECTOR_NUM,?CV_32F);??
  • ????//?讀取數據,生成pcaSet??
  • ????fp.open(filename,?ios::in);??
  • ????for?(int?i=0;?i<SAMPLE_NUM;?i++)??
  • ????{??
  • ????????getline(fp,?temp,?'?');??
  • ????????for?(int?j=0;?j<VECTOR_NUM;?j++)??
  • ????????{??
  • ????????????fp?>>?pcaSet.at<float>(i,?j);??
  • ????????}??
  • ????}??
  • ????fp.close();??
  • ??
  • //??cout?<<?pcaSet?<<?endl;??
  • ????PCA?pca(pcaSet,?Mat(),?0/*CV_PCA_DATA_AS_ROW*/);??
  • ????cout?<<?pca.eigenvalues?<<?endl;??
  • ????cout?<<?endl;??
  • ????cout?<<?pca.eigenvectors?<<?endl;??
  • }??

  • 我這里只把前3維的結果顯示如下:

    eigenvalues:[43.18,14.60,9.21]、

    eigenvectors:[0.013,0.034,-.0.100, -0.130, 0.207,0.963,-0.020;

    ? ? 0.157,0.038,0.121,0.893,0.395,0.046,0.060;

    ? ? 0.214,0.018,-0.001,-0.404,0.813,-0.228,0.277]



    OpenCV學習筆記(四十九)——號外!OpenCV-2.4.0 release 千呼萬喚始出來

    最近一直很忙,沒有及時回復網友的咨詢和疑問,有些回復也是寥寥數語。其實我也沒有辦法,面對大量的問題,有大部分都是可以通過網絡和圖書獲得答案,我實在沒有精力每個問題都詳細具體的回答,希望大家諒解,還是一位老師說的好:“知之為知之,不知百度知”。

    前陣子有些朋友已經發現了OpenCV-2.4.0beta已經放出了,又有重大改動,很是讓人興奮,我前一篇blog——OpenCV學習筆記(三十四)——OpenCV路在何方中提到的OpenCV下一步的改進在這次版本中很多都得到了實現。最讓我欣慰的是OpenCV有了自己的主頁code.opencv.org,之前的http://opencv.willowgarage.com終將退出歷史。其實這個beta版我也下載下來看過了,其中的文檔并沒有跟上,所以我一直在等。

    五一節日,OpenCV也給大家送上了大禮,2.4.0release出爐。下載地址還是在Sourceforge上,之前聽說OpenCV要把項目主頁挪到ROS上,看來還沒有實施。這次的壓縮包竟然有201M啊,有木有啊!可見這次版本添加了很多內容啊,由于有重大改動,接下來還是詳細給大家說說,其實新主頁上都有,大家英文好可以去那里看,免得我給翻譯錯了~~。還有就是OpenCV許諾大家下一個版本2.4.1將在五個月后出爐,看來只能是活到老學到老了。。。

    首先提到的還是網站的事,code.opencv.org現在是OpenCV開發首要的網站,相信日后的最新消息都會從這里放出。而opencv.org將作為官網(現在還沒有投入使用,期待一下)。

    還有一個重要的消息是一部分imgproc,?video,?calib3d,?features2d,?objdetect模塊中的函數將廢棄,扔到legacy中去了。興奮的同時又讓我很期待,新版本的整合是如何重整這些模塊的呢,看來我又得好好重新學習了。版本的重大變化肯定也導致了CMake腳本的改變,這部分不是太精通,這里不班門弄斧。

    一個新的模塊cv::Algorithm出爐。這個模塊包含了眾多算法,也是接下來研究的重點,有新研究再和大家分享,文檔我目前才開始看。

    之前被大家詬病的視頻部分這次又有所加強,大家經常抱怨OpenCV對視頻支持的不好,不知道這次的改動會不會打一個翻身仗,還有待大家實踐。

    feature2d模塊之前使用還是很不方便的,現在都被整合到Algorithm模塊中了。SURF和SIFT被挪到了nonfree模塊,這又是什么模塊,看來新版本的驚喜還不少。。。還有一些函數的增添和改進,這里由于沒有使用過,還是不亂講,有興趣自己去看一下咯。

    一個新模塊photo出爐,是為了計算攝影學而設計的,目前該模塊只有從imgproc中移植出來的inpainting算法,還有一個模塊是videostab是用來穩定視頻的(這個模塊還是beta版的)?這都是神馬啊!具體咋用我也不知道啊。。。

    之前我blog里提到的對GPU的支持力度要加強,OpenCV兌現了它的諾言,把光流法和特征點的提取檢測算法都在GPU模塊中實現了。之前我提過的android模塊也有所加強,但具體就不介紹了,我本身也不是搞移動開發的。新版本還特意提到了一個函數getBuildInformation,日后也要試試做啥的。

    從今日起,我的學習筆記都將使用OpenCV-2.4.0開發,之前的blog都是用2.3.1寫的,肯定有些東西,大家看看就亂了,給大家的學習帶來了不便,還請大家包涵理解。





    OpenCV學習筆記(五十)——Algorithm類介紹(core)

    剛開始學習新的2.4.0,大概看了一遍使用手冊,還是有些失望的,很多章節還是2.3.1的內容,文檔上的代碼也是漏洞很多。這里就簡單介紹一下Algorithm這個新的基類。本來以為這部分是一個新模塊的,看了referenceManual后才知道它只是一個基類,集成了一些相對復雜的算法,比如BM算法等立體匹配算法,前景背景分離的算法,光流法等模塊都集成在其中。類內成員函數主要有get、set、writhe、read、getList、create這些函數。前4個是用來從字符串和XML文件中讀取算法的參數用的,使用get,set要注意參數的名字對應的類型要和數據的類型對應,后果大家肯定懂的。有了Algorithm::write,以后SITF::wirte啊SURF::write啊,神馬的都可以再見了。getList可以得到Algorithm支持的算法類型。我測試了一下getList目前getList的算法有:BRIEF、Dense、FAST、CFIT、HARRIS、MSER、ORB、SIFT、STAR、SURF,日后應該都會實現,在手冊上只有SURF和SIFT的介紹,至少目前,我看來只支持這兩個算法。create就是創建算法的函數。使用呢,也相對簡單。這里還是要說明一下,新版的features2d模塊有較大改動,反正我看文檔中該部分大多剩下的都是一些公共接口,比如特征描述子、描述子的提取、特征的匹配等。只有FAST、MSER、ORB還在文檔中堅挺的出現(估計日后也要移植走),以前的Star、randomTree、rTreeClassifer神馬該被遺棄的一起,該放ml的去ml,SIFT、SURF啥的也被弄到nonfree這個新模塊里去了,不過這個新模塊好弱啊,目前只有SIFT和SURF算法,估計以后還要把其他的算法整合進去。

    接下來我就根據文檔中的一個示例實踐一下新版本的SIFT特征點檢測算法,并且對比下之前版本的SITF的寫法,大家從中感受新結構的不同吧。

    [cpp] view plain copy
  • #include?<opencv2/opencv.hpp>??
  • #include?<opencv2/nonfree/nonfree.hpp>??
  • #include?<opencv2/nonfree/features2d.hpp>??
  • ??
  • using?namespace?cv;??
  • ??
  • void?main()??
  • {??
  • ????Mat?image?=?imread("church01.jpg");??
  • ????Mat?imageGray?=?imread("church01.jpg",?0);??
  • ????Mat?descriptors;??
  • ????vector<KeyPoint>?keypoints;??
  • ????//?新版本2.4.0方法??
  • ????initModule_nonfree();??
  • ??
  • ????Ptr<Feature2D>?sift1?=?Algorithm::create<Feature2D>("Feature2D.SIFT");??
  • ????sift1->set("contrastThreshold",?0.01f);??
  • ????(*sift1)(imageGray,?noArray(),?keypoints,?descriptors);??
  • ??
  • ????//?2.3.1方法??
  • //??SiftFeatureDetector?sift2(0.06f,?10.0);??
  • //??sift2.detect(imageGray,?keypoints);??
  • ??????
  • ????drawKeypoints(image,?keypoints,?image,?Scalar(255,0,0));??
  • ??
  • ????imshow("test",?image);??
  • ????waitKey();??
  • }??

  • 注意initModule_<modulename>()函數,這個函數要在create前使用,才可以動態的創建算法,不然那個create的指針很野哦。大家都懂的。如果要使用SURF、SIFT算法,就要調用inintModule_nonfree(),要使用EM算法,就要先調用initModule_ml()。

    其實在我看來,這個Algorithm類更重要的是為開發者的算法提供一個公共的接口,以后開發者開發的算法,想要增加到OpenCV中去,就按照Algorithm的接口做就OK了,以免以后算法越來越多,我們的OpenCV也要變得臃腫了。

    創建自己的算法類現在也很容易了,用Algorithm類做基類,算法的參數作為成員變量,用get函數調用,添加AlgorithmInfo* info() const到自己的算法類中去,添加構造函數,AlgorithmInfo變量,可以參考EM算法的初始化看如何操作,添加其他函數。做好后就用create調用你自己的函數就ok啦,這次先簡單介紹,以后有機會自己做個函數了,體會深了再詳細寫出來跟大家分享。




    from: http://blog.csdn.net/yang_xian521/article/category/910716

    總結

    以上是生活随笔為你收集整理的OpenCV学习笔记(四十六)——FAST特征点检测features2D OpenCV学习笔记(四十七)——VideoWriter生成视频流highgui OpenCV学习笔记(四十八)——PCA算的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 久久色播| 农村寡妇一区二区三区 | 四虎在线观看视频 | xxxxx日韩| 2018av| 性欧美在线 | 亚洲综合av一区 | 超碰一级片 | 亚洲精品久久久久中文字幕二区 | avwww.| 娇妻之欲海泛舟无弹窗笔趣阁 | av网站在线观看免费 | 日本成人性爱 | 精品女同一区二区 | 亚洲一区二区三区无码久久 | 少妇高潮惨叫久久久久 | 伊人导航| 国产91一区二区三区在线精品 | 红桃视频在线播放 | 秋霞自拍 | 丰满人妻老熟妇伦人精品 | 亚洲综合小说网 | 国产人妖一区二区三区 | 国产成人综合久久 | 色老妹 | 91插插影库 | 国产另类在线 | 人妻少妇精品中文字幕av蜜桃 | 免费成人美女在线观看 | 日韩中文字幕二区 | 国产成人精品久久二区二区91 | 欧美黄色免费看 | 精品一区av| 中文字幕一区二区三区久久久 | 日韩无套无码精品 | www.欧美一区二区三区 | 草草浮力影院 | 一级做a在线观看 | 免费无码不卡视频在线观看 | 日本少妇一区二区三区 | 一级肉体全黄毛片 | 五月天黄色网 | 精品蜜桃av| 午夜啊啊啊 | 射影院 | 日日夜夜精品 | 国产乱人乱偷精品视频a人人澡 | 开心激情久久 | 丁香婷婷在线观看 | 欧美日韩免费看 | 午夜国产精品视频 | 三浦理惠子av在线播放 | 在线亚洲一区 | 久久尤物视频 | 91毛片观看 | 手机看片国产日韩 | 久久成人动漫 | 精品午夜一区二区 | 韩日免费av | 性一交一乱一伧国产女士spa | 99re这里只有精品6 | 日韩精品久久久久久久的张开腿让 | 国产草草影院 | 日韩毛片在线免费观看 | 91国偷自产一区二区三区老熟女 | 密臀av| 操你啦免费视频 | 成人免费区一区二区三区 | 在线亚洲色图 | 成年人香蕉视频 | 亚洲欧美乱日韩乱国产 | 午夜小电影 | av片亚洲 | 免费在线视频观看 | 男女无遮挡做爰猛烈视频 | 亚洲一级一区 | 亚洲av无码乱码国产精品fc2 | 理论视频在线观看 | 中文字幕有码在线播放 | 久久久久久九九九九 | 一区二区精品免费 | 久久人成 | 欧美精品一区二区三区四区五区 | 日韩电影福利 | 国产成人短视频在线观看 | 久久久精品久久久 | 超碰网址 | 蜜桃av一区 | 人人插人人爽 | 午夜精品影院 | 超碰极品 | 波多野结衣二区 | 蜜桃av网站 | 亚洲精品电影在线 | 九九综合 | 97国产精品视频人人做人人爱 | 我要操婊| 精品国精品国产自在久不卡 | 欧美粉嫩videosex极品 |