那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenCV學(xué)習(xí)總結(jié)之C++版

jf_78858299 ? 來(lái)源:鬼才薛定諤 ? 作者: CatalinChao ? 2023-02-07 16:03 ? 次閱讀

本文中代碼所采用的是OpenCV4.6.0,采用Cmake來(lái)管理工程,mac系統(tǒng)

OpenCV簡(jiǎn)介

OpenCV是“開(kāi)源計(jì)算機(jī)視覺(jué)庫(kù)”,「Open Sourec Computer Vision Library」,是一個(gè)基于開(kāi)源發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺(jué)庫(kù),包含了許多圖像處理和計(jì)算機(jī)視覺(jué)方面的通用算法,這里主要學(xué)習(xí)其api的應(yīng)用。

快速上手OpenCV圖像處理

  • 第一個(gè)程序:圖像顯示,代碼如下
//
// Created by on 2022/11/9.
//
#include     //相關(guān)頭文件
using namespace std;


int main() {
    cv::Mat srcImage = cv::imread("../dog.jpg"); //載入圖像
    cv::imshow("[原始圖]", srcImage);  //顯示圖像
    cv::waitKey(0); //等待用戶任意鍵按下才終止窗口
    return 0;

}
  • 第二個(gè)程序:圖像腐蝕

腐蝕是最基本的形態(tài)學(xué)運(yùn)算之一:就是用圖像中的暗色部分“腐蝕”掉圖像中的高亮部分

部分。

顯示效果如上圖

代碼如下:

//
// Created by  on 2022/11/9.
//
#include      //模塊頭文件
#include       //圖像處理頭文件
//using namespace cv;    //cv命名空間

int main() {
//載入原圖,保存在Mat矩陣類(lèi)對(duì)象中
    cv::Mat srcImage = cv::imread("../cat.jpeg");
//顯示原圖
    cv::imshow("faster",srcImage);
//進(jìn)行腐蝕操作
    cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT,cv::Size(15, 15));
    cv::Mat dstImage;
    cv::erode(srcImage, dstImage, element);
//顯示效果圖
    cv::imshow("laster", dstImage);
    cv::waitKey(0);
return 0;
}

getStructuringElement函數(shù)返回一個(gè)指定形狀和尺寸的內(nèi)核矩陣,然后調(diào)用erode函數(shù)進(jìn)行圖像腐蝕操作。

  • 第三個(gè)程序:圖像模糊
    對(duì)圖像進(jìn)行均值濾波操作,主要使用到blur函數(shù)

代碼如下:

//
// Created by on 2022/11/9.
//

#include 
#include 

//using namespace cv;

int main() {
    cv::Mat srcImage = cv::imread("../cat.jpeg");
    cv::imshow("src picture", srcImage);

//進(jìn)行均值濾波操作
    cv::Mat dstImage;
    cv::blur(srcImage, dstImage, cv::Size(7, 7));

//顯示效果圖
    cv::imshow("last picture", dstImage);
    cv::waitKey(0);
return 0;
}

先載入圖像,并將其轉(zhuǎn)成灰度圖,再用blur函數(shù)進(jìn)行圖像模糊以降噪,然后用canny函數(shù)進(jìn)行邊緣檢測(cè),最后進(jìn)行顯示

代碼如下:

//
// Created by  on 2022/11/9.
//

#include 
#include 

//using namespace std;

int main() {
    cv::Mat srcImage = cv::imread("../cat.jpeg");
    cv::imshow("canny test", srcImage);  //顯示原始圖
//將原始圖像轉(zhuǎn)化為灰度圖像
    cv::Mat dstImage, edge, grayImage;
//創(chuàng)建與原圖同類(lèi)型和大小的矩陣 dst
    dstImage.create(srcImage.size(), srcImage.type());

//將原圖像轉(zhuǎn)換為灰度圖像
    cv::cvtColor(srcImage, grayImage, cv::COLOR_BGR2GRAY);

//先使用3x3的內(nèi)核矩陣來(lái)降噪
    cv::blur(grayImage, edge, cv::Size(3, 3));

//運(yùn)行Canny 算子
    cv::Canny(edge, edge, 3, 9, 3);

//顯示效果圖
    cv::imshow("edge test", edge);
    cv::waitKey(0);
return 0;
}
  • 第五個(gè)程序:讀取并播放視頻
    使用VideoCapture從視頻文件或攝像頭捕獲視頻并顯示出來(lái)

有兩種寫(xiě)法,分別是:

  1. 先實(shí)例化,再初始化

VideoCapture video; video.open("one.mp4");

  1. 在實(shí)例化的同時(shí)進(jìn)行初始化

VideoCapture video("one.mp4");

視頻讀入到VideoCapture類(lèi)對(duì)象之后,緊接著可以用一個(gè)循環(huán)將每一幀顯示出來(lái),相關(guān)代碼如下:

等)時(shí),在頭部直接指定,如:```javascript,如下:

//
// Created by 方 on 2022/11/9.
//
#include

using namespace cv;

int main() {
//1. 讀入視頻
VideoCapture video("../one.mov");

//2. 循環(huán)顯示每一幀
while(1) {
        Mat frame; //定義一個(gè)Mat對(duì)象,用來(lái)存儲(chǔ)每一幀圖像
        video>>frame; //讀取當(dāng)前幀
        imshow("read_video", frame); //顯示當(dāng)前幀
        waitKey(30); //延時(shí)30ms

    }
return 0;
}
  • 第六個(gè)程序:調(diào)用攝像頭采集圖像

只需將上述代碼中的視頻文件名“one.mov”換成0就行,即VideoCapture(0)表示調(diào)用攝像頭而不是從文件中讀取視頻, 注意不要添加""

結(jié)合攝像頭調(diào)用實(shí)例程序來(lái)配合canny邊緣檢測(cè),得到canny邊緣檢測(cè)并高斯模糊后的攝像頭采集視頻,代碼如下:

//
// Created by  on 2022/11/9.
//
#include 

int main() {
    //從攝像頭讀入視頻
    cv::VideoCapture video(0);
    cv::Mat edge;

    //循環(huán)顯示每一幀
    while(1) {
        //1. 讀入圖像
        cv::Mat frame;  //定義一個(gè)Mat變量,用于存儲(chǔ)每一幀的圖像
        video >> frame;     //讀取當(dāng)前幀

        //2. 將原圖轉(zhuǎn)換成灰度圖
        cv::cvtColor(frame, edge, cv::COLOR_BGR2GRAY);

        //3. 使用3x3的內(nèi)核矩陣來(lái)進(jìn)行降噪 2x3+1=7
        cv::blur(edge, edge, cv::Size(7,7)); //進(jìn)行模糊

        //4. 進(jìn)行canny邊緣檢測(cè)并顯示
        cv::Canny(edge, edge, 0, 30, 3);
        cv::imshow("the video after canny", edge); //顯示經(jīng)過(guò)處理后的當(dāng)前幀
        if(cv::waitKey(30) >= 0)
            break;   //延時(shí)30ms
    }
    return 0;
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 圖像處理
    +關(guān)注

    關(guān)注

    27

    文章

    1300

    瀏覽量

    56894
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1511

    瀏覽量

    62396
  • 開(kāi)源
    +關(guān)注

    關(guān)注

    3

    文章

    3407

    瀏覽量

    42712
  • OpenCV
    +關(guān)注

    關(guān)注

    31

    文章

    635

    瀏覽量

    41556
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    關(guān)于C++模板總結(jié)

    大家好,今天給大家分享一篇關(guān)于 C++ 模板總結(jié)概述。
    發(fā)表于 09-19 11:55 ?541次閱讀

    C++STL算法(二)

    C++STL算法(二)
    的頭像 發(fā)表于 07-18 14:49 ?1127次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>之</b>STL算法(二)

    C++文件操作

    C++文件操作
    的頭像 發(fā)表于 07-21 10:52 ?1151次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>之</b>文件操作

    OpenCV C++程序編譯與演示

    1、在JetsonNano上編譯OpenCV源碼與OpenCV C++ YOLOv5程序演示  編譯OpenCV最新4.5.x版本  Jetson Nano自帶的
    發(fā)表于 11-10 16:42

    CC++學(xué)習(xí)過(guò)程總結(jié)

      總是被同學(xué)們問(wèn)到,如何學(xué)習(xí)CC++才不茫然,才不是亂學(xué),想了一下,這里給出一個(gè)總的回復(fù)。   一家之言,歡迎拍磚哈。   1、可以考慮先學(xué)習(xí)
    發(fā)表于 09-10 11:42 ?1249次閱讀

    OpenCV2.3的C++速查表免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是OpenCV2.3的C++速查表免費(fèi)下載。
    發(fā)表于 11-06 17:48 ?4次下載

    C++指針的學(xué)習(xí)建議

     一。對(duì)于眾多人提出的c/c++中指針難學(xué)的問(wèn)題做個(gè)總結(jié)
    發(fā)表于 11-07 17:13 ?8次下載
    <b class='flag-5'>C++</b>指針的<b class='flag-5'>學(xué)習(xí)</b>建議

    如何使用Borland C++ Builder6.0來(lái)開(kāi)發(fā)OpenCV的程序

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何使用Borland C++ Builder6.0來(lái)開(kāi)發(fā)OpenCV的程序。
    發(fā)表于 05-26 17:32 ?14次下載
    如何使用Borland <b class='flag-5'>C++</b> Builder6.0來(lái)開(kāi)發(fā)<b class='flag-5'>OpenCV</b>的程序

    C++中類(lèi)的繼承訪問(wèn)級(jí)別學(xué)習(xí)總結(jié)(二)

    上一篇文章我們介紹了c++中類(lèi)的繼承學(xué)習(xí)總結(jié);今天我們繼續(xù)來(lái)分享c++中類(lèi)的繼承中的訪問(wèn)級(jí)別的學(xué)習(xí)總結(jié)
    的頭像 發(fā)表于 12-24 16:10 ?787次閱讀

    C++重載函數(shù)學(xué)習(xí)總結(jié)

    函數(shù)重載是c++對(duì)c的一個(gè)重要升級(jí);函數(shù)重載通過(guò)參數(shù)列表區(qū)分不同的同名函數(shù);extern關(guān)鍵字能夠?qū)崿F(xiàn)cc++的相互調(diào)用;編譯方式?jīng)Q定符號(hào)表中的函數(shù)名的最終目標(biāo)名
    的頭像 發(fā)表于 12-24 17:10 ?832次閱讀

    C++靜態(tài)成員變量和靜態(tài)成員函數(shù)學(xué)習(xí)總結(jié)

    今天繼續(xù)分享c++的文章,學(xué)習(xí)還是不能落下,flag未完成,任務(wù)艱巨,好好學(xué)習(xí)
    的頭像 發(fā)表于 12-24 17:12 ?479次閱讀

    Linux C/C++ 學(xué)習(xí)路線

    一、秋招 Linux C/C++ offer 情況二、Linux C/C++ 方向的一些思考三、計(jì)算機(jī)基礎(chǔ)知識(shí)的梳理四、C++ 方向的深入
    發(fā)表于 11-06 19:36 ?14次下載
    Linux <b class='flag-5'>C</b>/<b class='flag-5'>C++</b> <b class='flag-5'>學(xué)習(xí)</b>路線

    運(yùn)用JNI連結(jié)OpenCV開(kāi)發(fā)C++并打包成aar lib的使用教學(xué)

    本身是作影像視覺(jué)相關(guān)的工作,多數(shù)時(shí)候都使用 Python 作為開(kāi)發(fā)語(yǔ)言,但OpenCV 本身是C++開(kāi)發(fā),學(xué) C++ 應(yīng)該有幫助。
    的頭像 發(fā)表于 08-15 09:24 ?1685次閱讀

    C++學(xué)習(xí)筆記c++的基本認(rèn)識(shí)

    自這篇文章我們即將開(kāi)始C++的奇幻之旅,其內(nèi)容主要是讀C++ Primer的總結(jié)和筆記,有興趣可以找原版書(shū)看看,對(duì)于學(xué)習(xí)C++還是有很大幫助
    的頭像 發(fā)表于 03-17 13:57 ?766次閱讀

    OpenCV圖像識(shí)別C++代碼

    的頭文件 在您的C++代碼中,包含以下必要的頭文件: # include # include # include # include # include # include # include 讀取圖像
    的頭像 發(fā)表于 07-16 10:42 ?2445次閱讀
    信誉百家乐官网平台| 金殿百家乐官网的玩法技巧和规则| 盈丰娱乐城| 大发888娱乐城网页版lm0| 游戏房百家乐赌博图片| 全讯网3344666| 百家乐官方游戏下载| 百家乐游戏规则玩法| 百家乐官网园天将| 百家乐官网欧洲赔率| 百家乐官网平的概率| 百家乐官网三多注码法| 祁阳县| 澳门足球| bet365 日博| 碧桂园太阳城二手房| 好运来百家乐的玩法技巧和规则| 百家乐笑话| 百家乐视频打麻将| 百家乐赌博出千| 百家乐官网平注法到656| 赌博百家乐官网规则| 百家乐官网下注技术| 汨罗市| 澳门百家乐官网打缆| 金龙博彩| 六合彩开奖结果| 百家乐太阳城| 乐天百家乐的玩法技巧和规则| 同花顺百家乐娱乐城| 百家乐制胜秘| 百家乐筹码套装| 太阳百家乐3d博彩通| 做生意门口禁忌| 百家乐千术道具| 太阳城77娱乐城| 大发888娱乐城网址| 大发888推广合作| 大发888帐号注册| 立即博娱乐城| 安仁县|