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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

OpenCV学习笔记(一)(二)(三)(四)(五)

發布時間:2025/3/21 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV学习笔记(一)(二)(三)(四)(五) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

OpenCV學習筆記(一)

決心開始研究OpenCV。閑言少敘,sourceforge網站最近的版本是2011年8月的OpenCV2.3.1,下載安裝,我這里使用的開發環境是vs2008,網上搜了一下配置的教程,與之前的幾個OpenCV版本的配置過程大體相同:(教程網上很多,知之為知之,不知百度之,我這里粗略再講一下)

1. 配置電腦的環境變量(Path變量)這里我的是D:\Program Files\OpenCV2.3.1\build\x86\vc9\bin(需要注銷才能生效),這里需要注意網上的教程又讓增加一個OPENCV變量,值為D:\Program Files\OpenCV2.3.1\build(你安裝的路徑中的build目錄)

2. 添加包含文件和庫文件,這個和前幾個版本方法類似,都是去工具->選項->VC目錄添加build目錄下的include目錄及其子目錄和你電腦對應版本的lib目錄(選擇x86 or x64,vc9 ?or vc10)

下面是第一個實例:

新建一個空項目,添加源文件如下:

[cpp]?view plain?copy
  • #include?<opencv2/core/core.hpp>??
  • #include?<opencv2/highgui/highgui.hpp>??
  • #include?<iostream>??
  • ??
  • using?namespace?cv;??
  • using?namespace?std;???
  • ??
  • int?main(?int?argc,?char**?argv?)??
  • {???
  • ????if(?argc?!=?2)???
  • ????{??
  • ?????cout?<<"?Usage:?display_image?ImageToLoadAndDisplay"?<<?endl;??
  • ?????return?-1;??
  • ????}??
  • ??????
  • ????Mat?image;??
  • ????image?=?imread(argv[1],?CV_LOAD_IMAGE_COLOR);???//?Read?the?file??
  • ??
  • ????if(!?image.data?)??????????????????????????????//?Check?for?invalid?input??
  • ????{??
  • ????????cout?<<??"Could?not?open?or?find?the?image"?<<?std::endl?;??
  • ????????return?-1;??
  • ????}??
  • ??
  • ????namedWindow(?"Display?window",?CV_WINDOW_AUTOSIZE?);//?Create?a?window?for?display.??
  • ????imshow(?"Display?window",?image?);???????????????????//?Show?our?image?inside?it.??
  • ??
  • ????waitKey(0);??????????????????????????????????????????//?Wait?for?a?keystroke?in?the?window??
  • ????return?0;??
  • }??

  • 這段程序可以在你安裝目錄下的samples\cpp\tutorial_code\introduction\display_image找到,編譯后,將圖片test.jpg放到opencvtest.exe相同的目錄中去,利用cmd命令行進入的可執行文件所在的目錄,

    運行opencvtest test.jpg

    則會顯示一個圖片,第一個程序成功。如圖


    如果遇到找不到tbb_debug.dll文件的問題,參考這里http://www.opencv.org.cn/forum/viewtopic.php?p=52223,只是我的環境是vs2008,大同小異。祝你成功!(PS:后來我發現這不是最好的處理辦法,最好的處理辦法是在Path路徑里添加環境變量D:\Program Files\OpenCV2.3.1\build\common\tbb\ia32\vc9

    接下來我覺得應該好好研究一下OpenCV里的doc文件夾下的教程和使用手冊,我個人覺得《學習OpenCV》這本書已經遠遠跟不上OpenCV發展的速度了



    OpenCV學習筆記(二)

    還是老話題,2.2版本對OpenCV可是進行了大刀闊斧的改革,用c++重新了大部分結構,而不是1.X版本中的c結構。這些模塊包括:

    core——定義了基本數據結構,包括最重要的Mat和一些其他的模塊

    imgproc——該模塊包括了線性和非線性的圖像濾波,圖像的幾何變換,顏色空間轉換,直方圖處理等等

    video——該模塊包括運動估計,背景分離,對象跟蹤

    calib3d——基本的多視角幾何算法,單個立體攝像頭標定,物體姿態估計,立體相似性算法,3D信息的重建

    features2d——顯著特征檢測,描述,特征匹配

    objdetect——物體檢測和預定義好的分類器實例(比如人臉,眼睛,面部,人,車輛等等)

    highgui——視頻捕捉、圖像和視頻的編碼解碼、圖形交互界面的接口

    gpu——利用GPU對OpenCV模塊進行加速算法

    ml——機器學習模塊(SVM,決策樹,Boosting等等)

    flann——Fast Library for Approximate Nearest Neighbors(FLANN)算法庫

    legacy——一些已經廢棄的代碼庫,保留下來作為向下兼容

    還有一些其他的模塊,比如FLANN算法庫、Google測試包、Python bingdings等等。



    OpenCV學習筆記(三)

    自從版本2.0,OpenCV采用了新的數據結構,用Mat類結構取代了之前用extended C寫的cvMat和lplImage,更加好用啦,最大的好處就是更加方便的進行內存管理,對寫更大的程序是很好的消息。

    需要注意的幾點:

    1. Mat的拷貝只是復制了Mat的信息頭,數據的指針也指向了被拷貝的數據地址,而沒有真正新建一塊內存來存放新的矩陣內容。這樣帶來的一個問題就是對其中一個Mat的數據操作就會對其他指向同一塊數據的Mat產生災難性的影響。

    2.建立多維數組的格式是這樣的
    [cpp]?view plain?copy
  • int?sz[3]?=?{2,?2,?2};??
  • Mat?L(3,?sz,?CV_8UC(1),?Scalar::all(0));??

  • 3.傳統的lplImage格式也可直接轉換為Mat格式
    [cpp]?view plain?copy
  • IplImage*?img?=?cvLoadImage("greatwave.png",?1);??
  • Mat?mtx(img);?//?convert?IplImage*?->?Mat??

  • 如果想將新版本的Mat格式轉換為老版本,則需要如下調用:

    [cpp]?view plain?copy
  • Mat?I;??
  • IplImage*?pI?=?&I.operator?IplImage();??
  • CvMat*?mI?=?&I.operator?CvMat();??

  • 不過更安全的調用格式為:

    [cpp]?view plain?copy
  • Ptr<IplImage>?piI?=?&I.operator?IplImage();??

  • 4.Mat結構更加友好,很多操作更接近matlab的風格

    5.也有Point2f,Point3f,vector等數據結構可以使用

    6.RNG類可以產生隨機數

    7.實現顏色通道的分離使用函數split



    OpenCV學習筆記(四)

    2.0新版本對數據結構進行了大幅修改:

    定義了DataType

    定義了Point_模板類,取代了之前版本的CvPoint、CvPoint2D32f

    定義了Point3_模板類,取代了之前版本的CvPoint2D32f

    定義了Size_模板類,取代了之前版本的CvSize和CvSize2D32f

    定義了Rect_模板類,取代了之前版本的CvRect

    RotatedRect模板類,

    TermCriteria模板類,取代了之前的CvTermCriteria,這個類是作為迭代算法的終止條件的,這個類在參考手冊里介紹的很簡單,我查了些資料,這里介紹一下。該類變量需要3個參數,一個是類型,第二個參數為迭代的最大次數,最后一個是特定的閾值。類型有CV_TERMCRIT_ITER、CV_TERMCRIT_EPS、CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,分別代表著迭代終止條件為達到最大迭代次數終止,迭代到閾值終止,或者兩者都作為迭代終止條件。以上的宏對應的c++的版本分別為TermCriteria::COUNT、TermCriteria::EPS,這里的COUNT也可以寫成MAX_ITER

    Matx模板類。Matx模板類是對Mat類的一個拓展,從Matx類有派生出Vec類,又Vec類又派生出Scalar_類,取代了CvScalar

    定義了Range類指定了一個序列的一個連續的子序列

    定義了Ptr類用來對老版本的數據結構進行指針操作,更安全有效,可以防止內存的不正常使用。

    最最重要的定義了Mat類來表示矩陣,取代了之前的CvMat和lplImage。Mat結構支持的操作有:

    構造析構函數Mat和~Mat

    對=、MatExpr、( )、CvMat、IplImage進行了運算符重載

    row、col函數

    rowRange、colRange

    類似matlab的運算操作diag、t、inv、mul、cross、dot、zeros、one、eye

    復制轉換變形clone、copyTo、convertTo、assignTo、setTo、reshape、create、addref

    其中copyTo函數有個妙用,不但可以復制Mat,還可以通過mask提取出感興趣的部分

    數據的操作release、resize、reserve、push_back、pop_back、locateROI、adjustROI

    Mat的信息total、isContinuous、elemSize、elemSize1、type、depth、channes、step1、size、empty

    其中step1函數返回Mat結構每一行的字節數=列數*通道數,更方便用指針定位特定元素

    定位ptr、at、begin、end

    還做了幾個擴展類Mat_、NAryMatlterator、SparseMat、SparseMat_取代了之前的CvSparseMat。這些類的操作運算與Mat大同小異,類聲明參考core的具體頭文件

    當然,新版本對老版本的數據結構和函數依然支持。

    新版本還在這些結構里支持dft、dct變換,我這里講一下我的新發現PCA類、SVD類

    PCA類有構造函數PCA,運算符重載(),project,backProject。SVD類有構造函數SVD,運算符重載(),compute,solveZ,backSubst

    這里介紹幾個我使用過的實用函數:

    inRange函數可以檢查Matsrc的內容是否在Matlower、Matupper之間,輸出結果是一個uchar型矩陣,1表示在兩者之間,否則為0,值得注意的是,Matlower,Matupper也可以用Scalar的格式

    bitwise_xxx函數對兩個矩陣進行位運算,結果保存在第三個矩陣當中

    mixChannels函數可以實現矩陣的指定通道復制到新矩陣的指定通道

    總之,新版本支持更多的數學運算,還支持一些畫圖操作



    OpenCV學習筆記(五)

    都知道,2.0版本對之前的OpenCV數據結構進行了大幅度的修改。但對之前版本的兼容是一個很重要的事情。這節就主要討論這個問題
    首先來看一下2.0版本對之前版本的進行了哪些修改
    1.采用了新的數據結構Mat作為圖像的容器,取代了之前的CvMat和lplImage,這個改動不是太復雜,只需適應一下新東西,而且可以自由轉換

    [cpp]?view plain?copy
  • Mat?I;??
  • IplImage?pI?=?I;??
  • CvMat?mI?=?I;??

  • 對于指針的操作要相對復雜一些,而且還要注意內存的釋放,我這里不推薦用老版本的數據結構,例如:
    [cpp]?view plain?copy
  • Mat?I;??
  • IplImage*?pI?=?&I.operator?IplImage();??
  • CvMat*?mI?=?&I.operator?CvMat();??

  • 2.對library進行了重組,將原來的一個大庫根據功能結構分成具體小庫,這樣包含頭文件的時候只需要加入你需要的庫,只是原來庫的子集
    3.使用了cv 這個namespace來防止和其他的library 結構沖突。所以在使用的時候也要預先加上cv::關鍵字,這也是新版本的函數,數據都省略了cv前綴的原因,一般放在include之后,格式為:
    [cpp]?view plain?copy
  • using?namespace?cv;?//?The?new?C++?interface?API?is?inside?this?namespace.?Import?it.??

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

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的OpenCV学习笔记(一)(二)(三)(四)(五)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 成年人看的视频网站 | 天天舔天天爽 | 超碰av男人的天堂 | 极品熟妇大蝴蝶20p 国产偷自拍视频 | 羞羞软件 | 亚洲一区无 | 免费日皮视频 | 91国在线视频 | 黄色片免费观看 | 800av免费在线观看 | 午夜三级在线 | 寡妇激情做爰呻吟 | aaaaaabbbbbb毛片| 亚洲精品一区二区18漫画 | av在线播放观看 | 国产欧美亚洲精品 | 男人懂得网站 | mm131美女大尺度私密照尤果 | 日韩激情中文字幕 | 欧美一区二区三区激情视频 | 久久极品| 亚洲国产精品久久久久婷婷老年 | 久热久操| 超碰精品在线观看 | 亚洲成人 av| 欧美九九视频 | 亚洲aaaaaaa | www.精品在线 | 在线午夜电影 | 精品人妻在线视频 | 极品少妇一区二区三区 | 欲色影音 | 国产jk精品白丝av在线观看 | 亚洲av综合色区无码另类小说 | 91免费高清在线观看 | 国产一级二级毛片 | 亚洲日本一区二区三区 | 无码aⅴ精品一区二区三区 精品久久在线 | 岳奶大又白下面又肥又黑水多 | 亚洲第一福利视频 | 国产日韩视频在线观看 | 婚后打屁股高h1v1调教 | 亚洲av无码片一区二区三区 | 国产白丝精品91爽爽久久 | 国产夜夜嗨 | 欧美一区二区三区影视 | 一级免费在线 | 精品一区二区不卡 | 人体裸体bbbbb欣赏 | 越南黄色一级片 | 夜夜操av | 亚洲国产无码久久 | 日韩一区二区三区视频在线观看 | 天天爽夜夜爽夜夜爽精品视频 | 欧美乱妇狂野欧美视频 | 人人人插 | 久久精品高清视频 | 屁屁影院国产第一页 | 国产精品美女久久久久图片 | 日韩免费av一区二区 | 深夜福利一区二区三区 | 69精品 | 黄色一级在线视频 | 国产精品久久久久久福利 | 美女干b视频 | 高潮喷水一区二区三区 | a∨鲁丝一区鲁丝二区鲁丝三区 | 一级a性色生活片久久无 | 香蕉视频免费在线看 | 亚洲a在线播放 | 在线色网站 | 午夜生活片 | 国产一级做a爰片久久毛片男男 | 快色av | 91娇羞白丝网站 | 久久99精品久久久久久 | 亚洲丝袜一区 | 在线观看中文字幕 | 色婷婷小说 | www网站在线免费观看 | 内地毛片| 亚洲精品激情视频 | 激情吧| 亚洲最大黄色 | 全部孕妇毛片 | 无码无遮挡又大又爽又黄的视频 | 黄网站在线观 | 久久综合久色欧美综合狠狠 | 午夜在线一区 | 大咪咪dvd| 国产人妻精品一区二区三区 | 男生尿隔着内裤呲出来视频 | av不卡一区二区 | 国自产拍偷拍精品啪啪一区二区 | 亚洲黄视频 | 黑人和白人做爰 | 国产伦理精品 | 亚洲免费在线观看 | 国产精品资源在线观看 |