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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

opencv3编程入门-毛星云

發(fā)布時(shí)間:2023/12/9 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opencv3编程入门-毛星云 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 第1章 邂逅OpenCV
    • 1.1 OpenCV周邊概念認(rèn)知
      • 1.1.1 圖像處理、計(jì)算機(jī)視覺(jué)與OpenCV
    • 1.2 OpenCV基本架構(gòu)分析
  • 第3章 HighGUI圖形用戶界面初步
  • 第4章 OpenCV數(shù)據(jù)結(jié)構(gòu)與基本繪圖
    • 4.2 常用數(shù)據(jù)結(jié)構(gòu):
    • 4.3 基本圖形的繪制
  • 第5章 core組件進(jìn)階
    • 5.1 訪問(wèn)圖像中的像素
      • 5.1.2 顏色空間縮減
      • 5.1.4 計(jì)時(shí)函數(shù)
      • 5.1.5 訪問(wèn)圖像中像素的三類方法
    • 5.2 ROI區(qū)域圖像疊加&圖像混合
      • 5.2.1 感興趣區(qū)域ROI
      • 5.2.2 線性混合操作
      • 5.2.3 計(jì)算數(shù)組加權(quán)和:addWeighted()函數(shù)
    • 5.3 分離顏色通道、多通道圖像混合
    • 5.4 圖像對(duì)比度、亮度值調(diào)整
    • 5.5 離散傅里葉變換
    • 5.6 XML文件YAML文件的操作
  • 第6章 圖像處理
    • 6.1 線性濾波:方框?yàn)V波、均值濾波、高斯濾波
      • 6.1.2 圖像濾波與濾波器
      • 6.1.3 線性濾波器
      • 6.1.4 濾波和模糊
      • 6.1.5 鄰域算子和線性鄰域?yàn)V波
    • 6.2 非線性濾波: 中值濾波、雙邊濾波
    • 6.3 形態(tài)學(xué)濾波(1):腐蝕與膨脹
    • 6.4 形態(tài)學(xué)濾波(2):開(kāi)運(yùn)算、閉運(yùn)算、形態(tài)學(xué)梯度、頂帽、黑帽
  • 第7章 圖像變換
    • 7.1 基于OpenCV的邊緣檢測(cè)
      • 7.1.1 邊緣檢測(cè)的一般步驟
      • 7.1.2 canny算子
    • 7.2 霍夫變換

第1章 邂逅OpenCV

1.1 OpenCV周邊概念認(rèn)知

1.1.1 圖像處理、計(jì)算機(jī)視覺(jué)與OpenCV

  • 數(shù)字圖像處理是通過(guò)計(jì)算機(jī)對(duì)圖像進(jìn)行去除噪聲、增強(qiáng)、復(fù)原、分割、提取特征等處理的方法和技術(shù)

1.2 OpenCV基本架構(gòu)分析

一些核心模塊:

  • core: 核心功能模塊包含如下內(nèi)容:
    • OpenCV基本數(shù)據(jù)結(jié)構(gòu)
    • 動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)
    • 繪圖函數(shù)
    • 數(shù)組操作和相關(guān)函數(shù)
    • 輔助功能與系統(tǒng)函數(shù)和宏
    • 與OpenGL的互操作
  • imgproc: Image和Process這兩個(gè)單詞的縮寫組合,圖像處理模塊
  • gpu: 運(yùn)用GPU加速的計(jì)算機(jī)視覺(jué)模塊
  • highgui: 高層GUI圖形用戶界面
  • ml: Machine Learning,機(jī)器學(xué)習(xí)模塊,包括如下內(nèi)容:
    • 統(tǒng)計(jì)模型(Statistical Models)
    • 一般貝葉斯分類器(Normal Bayes Classifier)
    • K-近鄰(K-Nearest Neighbors)
    • 支持向量機(jī)(Support Vector Machines)
    • 決策樹(shù)(Decision Trees)
    • 提升(Boosting)
    • 梯度提高數(shù)(Gradiect Boosted Trees)
    • 隨機(jī)數(shù)(Random Trees)
    • 超隨機(jī)數(shù)(Extremely randomized trees)
    • 期望最大化(Expectation Maximization)
    • 神經(jīng)網(wǎng)絡(luò)(Neural Networks)
    • ML Data

OpenCV各版本的差異:
OpenCV2 帶來(lái)全新的c++接口;通過(guò)CUDA和OpenCL實(shí)現(xiàn)GPU加速
OpenCV3 進(jìn)行項(xiàng)目架構(gòu)改變,使用內(nèi)核+插件的架構(gòu)方式;大部分方法都使用了OpenCL加速
OpenCV4 c++11編譯器才能編譯
OpenCL:
OpenCL是一個(gè)為異構(gòu)平臺(tái)編寫程序的框架。編寫語(yǔ)言基于c99。用于并行計(jì)算,加速計(jì)算。
openCV中集成了OpenCL
OpenCL和CUDA比較:
不同點(diǎn):
OpenCL是通用的異構(gòu)平臺(tái)編程語(yǔ)言,為了兼顧不同設(shè)備,使用繁瑣。
CUDA是nvidia公司發(fā)明的專門在其GPGPU上的編程的框架,使用簡(jiǎn)單,好入門
相同點(diǎn):
都是基于任務(wù)并行與數(shù)據(jù)并行。
OpenGL是什么,為什么存在與OpenCV中
一個(gè)跨編程語(yǔ)言、跨平臺(tái)的應(yīng)用程序接口(API)的規(guī)格,它用于生成二維、三維圖像。
在 2.3 之前 OpenCV 的渲染部分都是由 CPU 來(lái)實(shí)現(xiàn)的,不論是畫線還是把圖片顯示到屏幕上。這有兩個(gè)問(wèn)題,速度慢,同時(shí)沒(méi)法畫> 三維物體。引入 OpenGL 是為了借助 顯卡的力量,顯卡比 CPU 更擅長(zhǎng)渲染,同時(shí)顯卡和 CPU 可以同時(shí)干活

第3章 HighGUI圖形用戶界面初步

函數(shù)名稱用途
imread讀取文件
imshow顯示圖片
namedWindow用于創(chuàng)建一個(gè)窗口
imwrite輸出文件
createTrackbar創(chuàng)建一個(gè)可以調(diào)整數(shù)值的軌跡條
getTrackbarPos獲取軌跡條的當(dāng)前位置
SetMouseCallback為指定的窗口設(shè)置鼠標(biāo)回調(diào)

第4章 OpenCV數(shù)據(jù)結(jié)構(gòu)與基本繪圖

Mat不但是一個(gè)非常有用的圖像容器類,同時(shí)也是一個(gè)通用的矩陣類,可以用來(lái)創(chuàng)建和操作多維矩陣。

  • OpenCV函數(shù)中輸出圖像的內(nèi)存分配是自動(dòng)完成的
  • 使用OpenCV的c++接口時(shí)不需要考慮內(nèi)存的釋放問(wèn)題
  • 賦值運(yùn)算符和拷貝構(gòu)造函數(shù)(構(gòu)造函數(shù))只復(fù)制信息頭
  • 使用函數(shù)clone() 或者copyTo()來(lái)復(fù)制一幅圖像的矩陣

4.2 常用數(shù)據(jù)結(jié)構(gòu):

定義釋義
Point2維點(diǎn), 支持int , Point_ Point2i Point 等價(jià)
Point2f2維點(diǎn) , 支持float
Point3f3維點(diǎn)
Scalar顏色RGB
Size顏色RGB, typedef Size_ Size2i;typedef Size2i Size
Rect矩形
cvtColor顏色空間轉(zhuǎn)換
Matx輕量級(jí)Mat,使用前規(guī)定好大小
VecMatx的派生類,是一個(gè)以為的Matx,和vector很相似

OpenCV圖片通道的存儲(chǔ)順序時(shí)BGR,而不是RGB.

4.3 基本圖形的繪制

  • 繪制直線 line函數(shù)
  • 繪制橢圓 ellipse 函數(shù)
  • 繪制舉行 rectangle 函數(shù)
  • 繪制圓形 circle函數(shù)
  • 多邊形 fillPoly 函數(shù)

第5章 core組件進(jìn)階

5.1 訪問(wèn)圖像中的像素

5.1.2 顏色空間縮減

單通道的像素值只有256個(gè),但是三通道有256*256*256種,處理起來(lái)比較麻煩,進(jìn)行縮減后圖像會(huì)有一樣的效果。
像素縮減的辦法是:
Inew=(iold/10)?10I_{new}=(i_{old}/10)* 10 Inew?=(iold?/10)?10

乘除法運(yùn)算代價(jià)高,加減法及賦值運(yùn)算代價(jià)低。
可以把所有的像素對(duì)應(yīng)關(guān)系存表,利用查表后復(fù)制的方式替代上述計(jì)算公式,以減小運(yùn)算代價(jià)

5.1.4 計(jì)時(shí)函數(shù)

double time0=static_cast<double>(getTickCount());//記錄起始時(shí)間 //進(jìn)行圖像處理操作 time0=((double)getTickCount() - time0) / getTickFrequency(); cout<<"此方法的運(yùn)行時(shí)間為:“<<time0<<"秒”<<endl;

5.1.5 訪問(wèn)圖像中像素的三類方法

  • 方法一 指針訪問(wèn)

  • 方法二 迭代器

  • 方法三 動(dòng)態(tài)地址計(jì)算

5.2 ROI區(qū)域圖像疊加&圖像混合

5.2.1 感興趣區(qū)域ROI

定義ROI有兩種方法:

  • 方法一 指定矩形的左上角坐標(biāo)和矩形長(zhǎng)寬
  • 方法二 指定感興趣行或列的范圍

5.2.2 線性混合操作

進(jìn)行畫面疊加理論公式:
g(x)=(1?α)f0(x)+αf1(x)g(x)=(1-\alpha )f_0(x)+\alpha f_1(x) g(x)=(1?α)f0?(x)+αf1?(x)

5.2.3 計(jì)算數(shù)組加權(quán)和:addWeighted()函數(shù)

5.3 分離顏色通道、多通道圖像混合

有時(shí)需要對(duì)BGR三個(gè)通道分別顯示和調(diào)整。通過(guò)OpenCV的split和merge方法可以達(dá)到目的。

5.4 圖像對(duì)比度、亮度值調(diào)整

理論依據(jù)公式:
g(x)=a?f(x)+bg(x)=a*f(x)+b g(x)=a?f(x)+b

  • a用來(lái)控制圖像的對(duì)比度
  • b用來(lái)控制圖像的亮度

5.5 離散傅里葉變換

《傅里葉分析》

對(duì)一張圖像使用傅里葉變換就是將它分解成正弦和余弦兩部分,也就是將圖像從空間域轉(zhuǎn)換到頻域。

一些關(guān)鍵函數(shù):

函數(shù)名稱作用
dft進(jìn)行傅里葉變換
getOptimalDFTSize返回DFT最有尺寸
copyMakeBorder擴(kuò)充圖像邊界
magnitude計(jì)算二維矢量的幅值
log計(jì)算自然對(duì)數(shù)
normalize矩陣歸一化

此部分理解需要一些理論基礎(chǔ),待學(xué)習(xí)《數(shù)字信號(hào)處理》中相關(guān)內(nèi)容再來(lái)細(xì)致學(xué)習(xí)吧~

5.6 XML文件YAML文件的操作

使用FileStorage類進(jìn)行文件xml和yaml文件操作

第6章 圖像處理

6.1 線性濾波:方框?yàn)V波、均值濾波、高斯濾波

6.1.2 圖像濾波與濾波器

  • 圖像濾波的目的: 抽出圖像的特征作為圖像識(shí)別的特征模式;適應(yīng)圖像處理要求,消除圖像數(shù)字化時(shí)所混入的噪聲
  • 平滑濾波的目的: 模糊;消除噪音
  • 濾波器,可以想象為一個(gè)包含加權(quán)系數(shù)的窗口,透過(guò)這個(gè)窗口去看圖像
    五種常用的圖像平滑處理操作:
濾波方式函數(shù)
方框?yàn)V波BoxBlur函數(shù)
均值濾波Blur函數(shù)
高斯濾波GaussianBlur函數(shù)
中值濾波medisnBlur函數(shù)
雙邊濾波bilateralFilter函數(shù)

6.1.3 線性濾波器

名稱作用
低通濾波器允許低頻率通過(guò)
高通濾波器允許高頻率通過(guò)
帶通濾波器允許一定范圍頻率通過(guò)
帶阻濾波器允許一定范圍頻率通過(guò)并且允許其他頻率通過(guò)
全通濾波器允許所有頻率通過(guò),僅僅改變相位關(guān)系
陷波濾波器阻止一個(gè)狹窄頻率范圍通過(guò)

6.1.4 濾波和模糊

兩者的區(qū)別: 濾波可以分為低通濾波和高通濾波,低通就是模糊,高通就是銳化。

6.1.5 鄰域算子和線性鄰域?yàn)V波

6.2 非線性濾波: 中值濾波、雙邊濾波

濾波方式函數(shù)
中值濾波medianBlur
雙邊濾波bilateralFilter

6.3 形態(tài)學(xué)濾波(1):腐蝕與膨脹

主要功能:

  • 消除噪聲
  • 分割出獨(dú)立的圖像元素,在圖像中連接相鄰的元素
  • 尋找圖像中的明顯的極大值區(qū)域或極小值區(qū)域
  • 求出圖像的梯度

膨脹(dilate) 就是求局部最大值的操作。
腐蝕(erode) 就是求局部最小值的操作。
API函數(shù):

操作類型函數(shù)
膨脹dilate
腐蝕erade

6.4 形態(tài)學(xué)濾波(2):開(kāi)運(yùn)算、閉運(yùn)算、形態(tài)學(xué)梯度、頂帽、黑帽

  • 開(kāi)運(yùn)算: 先腐蝕后膨脹
  • 閉運(yùn)算: 先膨脹后腐蝕
  • 形態(tài)學(xué)梯度: 膨脹圖與腐蝕圖之差(可以保留物體的邊緣輪廓)
  • 頂帽:原圖像與開(kāi)運(yùn)算只差
  • 黑帽:閉運(yùn)算與原圖像之差

第7章 圖像變換

變換常見(jiàn)的例子就是傅里葉變換。這類操作的結(jié)果仍然保存為OpenCV圖像結(jié)構(gòu)的形式,但是新圖像的每個(gè)單獨(dú)像素表示原始圖像的頻譜分量,而不是通常考慮的空間分量。

7.1 基于OpenCV的邊緣檢測(cè)

7.1.1 邊緣檢測(cè)的一般步驟

  • 濾波: 邊緣檢測(cè)主要基于圖像強(qiáng)度的一階和二階導(dǎo)數(shù),但是導(dǎo)數(shù)通常對(duì)噪聲敏感,因此必須采用濾波器來(lái)改善與噪聲有關(guān)的邊緣檢測(cè)器的性能。
  • 增強(qiáng): 增強(qiáng)邊緣的基礎(chǔ)是確定圖像各點(diǎn)鄰域強(qiáng)度的變化值。
  • 檢測(cè): 閾值化方法
  • 7.1.2 canny算子

    • Canny 邊緣檢測(cè)的步驟
  • 消除噪聲
  • 計(jì)算梯度幅值和方向
  • 非極大值抑制
  • 滯后閾值
  • 邊緣檢測(cè)對(duì)應(yīng)API

    檢測(cè)方法API
    Canny邊緣檢測(cè)Canny
    Soble算子Sobel
    scharr濾波器Scharr

    7.2 霍夫變換

    OpenCV中的霍夫線變換有如下三種:

  • 標(biāo)準(zhǔn)霍夫變換,由HoughLines函數(shù)調(diào)用
  • 多尺度霍夫變換,由HoughLines函數(shù)調(diào)用
  • 累計(jì)概率霍夫變換,有HoughLinesP函數(shù)調(diào)用
  • 總結(jié)

    以上是生活随笔為你收集整理的opencv3编程入门-毛星云的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。