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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

计算机视觉及OpenCV入门简介

發布時間:2023/12/31 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机视觉及OpenCV入门简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

計算機視覺及OpenCV入門簡介

這是一篇實驗室培訓過后寫的感悟,附帶授課大佬及實驗室GitHub地址:

  • 大佬:https://github.com/shentibeitaokongle
  • 實驗室:https://github.com/android-nuc

計算機視覺

什么是計算機視覺?

計算機視覺是指用攝影機和電腦代替人眼對目標進行識別、跟蹤和測量等機器視覺,并進一步做圖形處理,使電腦處理成為更適合人眼觀察或傳送給儀器檢測的圖像。

簡單概括為:

  • 讓計算機去認知世界,人工智能
  • 圖像處理 + 機器學習 + 三維理論
  • 計算機視覺能干什么?

    • 圖像識別
    • 無人汽車
    • AR、VR
    • 三維重建
    • 工程測繪
    • 圖像分割
    • ……

    計算機視覺(CV)與計算機圖形學(CG)的區別

    計算機圖形學(Computer Graphics)和計算機視覺(Computer Vision)是同一過程的兩個方向。CG將抽象的語義信息轉化成圖像,而CV是從圖像中提取抽象的語義信息。

    計算機圖形學:輸入的是對虛擬場景的描述,通常為多邊形數組,而每個多邊形由三個頂點組成,每個頂點包括三維坐標、貼圖坐標、RGB顏色等。輸出的是圖像,即二維像素數組。

    計算機視覺:輸入的是圖像或圖像序列,通常來自相機、攝像頭或視頻文件。輸出的是對于圖像序列對應的真實世界的理解,比如檢測人臉、識別車牌。

    參考文章:https://blog.csdn.net/hanlin_tan/article/details/50447895

    CV對大學生比賽、就業、讀研有什么用?

    • CV的魅力在于各種高深的研究方向和算法,有廣泛的應用場景,結合CV會有很多有趣的idea
    • 圖像處理,或者視覺相關的崗位薪資比較高
    • 計算機視覺仍然是計算機科研的熱門方向

    OpenCV

    下面是對OpenCV的簡單介紹,應用實例在后面。

    什么是OpenCV?

    中文名:開源計算機視覺庫
    英文全稱:Open Source Computer Vision Library

    OpenCV于1999年由Intel建立,如今由Willow Garage提供支持。OpenCV是一個基于BSD許可(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Windows和Mac OS操作系統上。它由一系列 C 函數和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的接口,實現了圖像處理和計算機視覺方面的很多通用算法。它支持CUDA加速,現在已經發展到了OpenCV4.0.1版本。

    為什么會有OpenCV?

    計算機視覺市場巨大而且持續增長,且這方面沒有標準API,如今的計算機視覺軟件大概有以下三種:
    1、研究代碼(慢,不穩定,獨立并與其他庫不兼容)
    2、耗費很高的商業化工具(比如Halcon, MATLAB+Simulink)
    3、依賴硬件的一些特別的解決方案(比如視頻監控,制造控制系統,醫療設備)這是如今的現狀,而標準的API將簡化計算機視覺程序和解決方案的開發,OpenCV致力于成為這樣的標準API。
    OpenCV致力于真實世界的實時應用,通過優化的C代碼的編寫對其執行速度帶來了可觀的提升,并且可以通過購買Intel的IPP高性能多媒體函數庫(Integrated Performance Primitives)得到更快的處理速度。

    圖像

    圖像的取樣與量化

    計算機保存的圖像都是一個一個的像素點,稱為數字圖像。我們想要在計算機中處理圖像,就必須把真實的圖像通過數字化轉變成計算機能夠接受的顯示和存儲格式,然后再用計算機進行分析處理。
    圖像數字化過程由圖像的取樣與量化來完成。取樣就是要用多少點來描述一幅圖像,取樣結果質量的高低就是用圖像的分辨率來衡量的;量化是指要使用多大范圍的數值來表示圖像采樣之后的一個點。也可以說,數字化坐標值稱為取樣,數字化幅度值稱為量化。


    上圖左側是要數字化的物體,右側是數字化后的圖像,每個小格即為一個像素點。


    推薦文章:https://www.cnblogs.com/yunfung/p/6753337.html
    https://blog.csdn.net/zqhwando/article/details/78871140

    圖像還能看成是什么?

    圖像由一組波組成,我們要把圖像進行數字化存儲,就需要提到一個概念——傅里葉級數。



    傅里葉級數指任何周期函數都可以用正弦函數和余弦函數構成的無窮級數來表示。

    傅里葉變換(空間域->頻率域)

    傅立葉變換,表示能將滿足一定條件的某個函數表示成三角函數(正弦和/或余弦函數)或者它們的積分的線性組合。
    傅里葉變換的本質是將一個周期信號分解成無限多分開的(離散的)正弦波。




    為什么要提到傅里葉變換呢?因為當你在二維很難處理一個圖像的時候,可能換個“角度”處理起來卻很簡單,這是傅里葉變換的一個魅力所在。

    例如,處理一張異常圖片,頻率方向無法進行或者工作量太大時,可能改為在時間方向處理會很簡單。

    參考文章:https://blog.csdn.net/yangdashi888/article/details/53215256

    圖像濾波(空間域濾波)

    圖像濾波,即在盡量保留圖像細節特征的條件下對目標圖像的噪聲進行抑制,是圖像預處理中不可缺少的操作,其處理效果的好壞將直接影響到后續圖像處理和分析的有效性和可靠性。其實質是減少數字圖像在使用前的的噪聲污染。

    線性濾波可以說是圖像處理最基本的方法,它可以允許我們對圖像進行處理,產生很多不同的效果。做法很簡單。首先,我們有一個二維的濾波器矩陣(有個高大上的名字叫卷積核or濾波器)和一個要處理的二維圖像。然后,對于圖像的每一個像素點,計算它的鄰域像素和濾波器矩陣的對應元素的乘積,然后加起來,作為該像素位置的值。這樣就完成了濾波過程。

    卷積

    卷積可以看作是一種結合了矩陣運算的計算方法,它是是分析數學中一種重要的運算。

    設:f(x),g(x)是R1上的兩個可積函數,作積分:

    可以證明,關于幾乎所有的實數x,上述積分是存在的。這樣,隨著x的不同取值,這個積分就定義了一個新函數 h(x),稱為函數 f 與 g 的卷積,記為 h(x) = (f * g)(x)。

    容易驗證,(f * g)(x) = (g * f)(x),并且(f * g)(x)仍為可積函數。

    卷積與傅里葉變換有著密切的關系。利用一點性質,即兩函數的傅里葉變換的乘積等于它們卷積后的傅里葉變換,能使傅里葉分析中許多問題的處理得到簡化。

    卷積關系最重要的一種情況,就是在信號與線性系統或數字信號處理中的卷積定理。利用該定理,可以將時間域或空間域中的卷積運算等價為頻率域的相乘運算,從而利用FFT等快速算法,實現有效的計算,節省運算代價。

    C++語言代碼:

    void convolution(float *input1, float *input2, float *output, int mm, int nn) { float *xx = new float[mm+nn-1]; // do convolution for (int i = 0; i < mm+nn-1; i++){ xx[i] = 0.0;for (int j = 0; j < mm; j++) { if (i-j > 0 && i-j < nn)xx[i] += input1[j] * input2[i-j]; } }// set value to the output array for (int i = 0; i < mm; i++) output[i] = xx[i + (nn-1) / 2];delete[] xx; }

    示例:

    • 原圖

    • 黑白

    VideoCapture video(0);Mat src = imread("F:/C/picture/lena.JPG", 1);cvtColor(src, src, COLOR_BGR2GRAY);namedWindow("src", WINDOW_AUTOSIZE);imshow("src", src);
    • 卷積核 or 濾波器:[ -1, 0, 1 ]
    VideoCapture video(0);Mat src = imread("F:/C/picture/lena.JPG", 1);cvtColor(src, src, COLOR_BGR2GRAY);namedWindow("src", WINDOW_AUTOSIZE);imshow("src", src);Mat dImg = Mat(src.rows, src.cols - 2, CV_8UC1);for (int i = 0; i < src.rows; i++){for (int j = 1; j < src.cols - 1; j++){dImg.at<uchar>(i, j - 1) = src.at<uchar>(i, j + 1) - src.at<uchar>(i, j - 1);}}namedWindow("dst", CV_WINDOW_AUTOSIZE);imshow("dst", dImg);waitKey(0);

    另附卷積與相關的區別:https://blog.csdn.net/m0_37407756/article/details/78593917

    高斯模糊

    高斯模糊,也叫高斯平滑,用來減少圖像噪聲以及降低細節層次。從數學的角度來看,圖像的高斯模糊過程就是圖像與正態分布做卷積。


    可以將高斯模糊簡單理解為圖像中的每個像素都重新設置像素值為周邊相鄰像素的平均值,相鄰像素的范圍越大,模糊程度就越大。需要注意的是,高斯模糊應該使用加權平均,因為距離當前像素越近的像素與其聯系越密切。

    由于正態分布又叫作高斯分布,所以這項技術就叫作高斯模糊。由于高斯函數的傅立葉變換是另外一個高斯函數,所以高斯模糊對于圖像來說就是一個低通濾波器。

    還是用前面的黑白圖片做示范:

    代碼:

    //5x5卷積模板Mat model = Mat(5, 5, CV_64FC1);double sigma = 80;for (int i = -2; i <= 2; i++){for (int j = -2; j <= 2; j++){model.at<double>(i + 2, j + 2) = exp(-(i * i + j * j) / (2 * sigma * sigma)) / (2 * PI * sigma * sigma);}}double gaussSum = 0;gaussSum = sum(model).val[0];for (int i = 0; i < model.rows; i++){for (int j = 0; j < 5; j++){model.at<double>(i, j) = model.at<double>(i, j) / gaussSum;}}Mat dst = Mat(src.rows - 4, src.cols - 4, CV_8UC1);for (int i = 2; i < src.rows - 2; i++){for (int j = 2; j < src.cols - 2; j++){double sum = 0;for (int m = 0; m < model.rows; m++){for (int n = 0;n < model.cols; n++){sum += (double)src.at<uchar>(i + m - 2, j + n - 2) * model.at<double>(m, n);}}dst.at<uchar>(i - 2, j - 2) = (uchar)sum;}}namedWindow("gaussBlur", WINDOW_AUTOSIZE);imshow("gaussBlur", dst);waitKey(0);

    正態分布



    參考文章:https://blog.csdn.net/zouxy09/article/details/49080029

    濾波常用API

    • 邊緣檢測(微分)
    • Sobel算子,拉普拉斯算子
    • 圖像去噪/平滑(積分)
    • GaussianBlur(高斯模糊)

    相關會議及期刊

    以下是收集的一些與計算機視覺相關的會議及期刊,感興趣的話可以看看:

    會議

    • 頂級
      ICCV:International Conference on Computer Vision,國際計算機視覺大會
      2019官網:http://iccv2019.thecvf.com/
      CVPR:International Conference on Computer Vision and Pattern Recognition,國際計算機視覺與模式識別大會
      2019官網:http://cvpr2019.thecvf.com/
      ECCV:European Conference on Computer Vision,歐洲計算機視覺大會
      2018官網:https://eccv2018.org/
    • 較好
      ICIP:International Conference on Image Processing,國際圖像處理大會
      BMVC:British Machine Vision Conference,英國機器視覺大會
      ICPR:International Conference on Pattern Recognition,國際模式識別大會
      ACCV:Asian Conference on Computer Vision,亞洲計算機視覺大會

    期刊

    • 頂級
      PAMI:IEEE Transactions on Pattern Analysis and Machine Intelligence,IEEE 模式分析與機器智能雜志
      官網:https://ieeexplore.ieee.org/Xplore/home.jsp
      IJCV:International Journal on Computer Vision,國際計算機視覺雜志
      官網:https://lmb.informatik.uni-freiburg.de/index.php
    • 較好
      TIP:IEEE Transactions on Image Processing,IEEE圖像處理雜志
      CVIU:Computer Vision and Image Understanding,計算機視覺與圖像理解
      PR:Pattern Recognition,模式識別
      PRL:Pattern Recognition Letters,模式識別快報

    總結

    以上是生活随笔為你收集整理的计算机视觉及OpenCV入门简介的全部內容,希望文章能夠幫你解決所遇到的問題。

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