乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      OpenCV3入門教程(一)基礎(chǔ)知識

       行走在理想邊緣 2019-05-12

      ------韋訪 20181011

      1、概述

      想學(xué)習(xí)圖像處理,不管是機(jī)器學(xué)習(xí)也好,深度學(xué)習(xí)也好,不會點OpenCV好像有點說不過去吧?所以,現(xiàn)在開始OpenCV的學(xué)習(xí)。

      2、讀寫圖片

      先從圖片的讀寫開始,opencv讀取圖片的函數(shù)是imread,默認(rèn)情況下,imread函數(shù)返回BGR格式的圖像,可以用imwrite函數(shù)將數(shù)據(jù)寫到本地。下面的代碼會將JPG圖片轉(zhuǎn)成PNG。

      1. import cv2
      2. image = cv2.imread('dog.jpeg')
      3. cv2.imwrite('dog.png', image)

      運行結(jié)果:

      如果想將圖片通過OpenCV的窗口顯示,則調(diào)用imshow函數(shù),注意在代碼末尾加上waitkey函數(shù),否則窗口就直接關(guān)閉了,不知道的還以為imshow函數(shù)沒起作用。代碼如下,

      1. import cv2
      2. image = cv2.imread('dog.jpeg')
      3. cv2.imwrite('dog.png', image)
      4. cv2.imshow('dog', image)
      5. cv2.waitKey(0)

      運行結(jié)果:

      上面提到,imread默認(rèn)返回的是BGR圖片,我們也可以通過設(shè)置參數(shù),讓其返回一個灰度圖片,代碼如下,

      1. import cv2
      2. image = cv2.imread('dog.jpeg', flags=cv2.IMREAD_GRAYSCALE)
      3. cv2.imshow('dog', image)
      4. cv2.waitKey(0)

      運行結(jié)果:

      3、高通濾波器

      高通濾波器(HPF)是檢測圖像的某個區(qū)域,根據(jù)該像素與周圍像素的亮度差值來提升該像素的亮度的濾波器。下面來舉個例子,代碼如下,

      1. import cv2
      2. import numpy as np
      3. from scipy import ndimage

      4. kernel_3x3 = np.array([
      5. [-1, -1, -1],
      6. [-1, 8, -1],
      7. [-1, -1, -1],
      8. ])

      9. kernel_5x5 = np.array([
      10. [-1, -1, -1, -1, -1],
      11. [-1, -1, 2, -1, -1],
      12. [-1, 2, 4, 2, -1],
      13. [-1, -1, 2, -1, -1],
      14. [-1, -1, -1, -1, -1],
      15. ])

      16. img = cv2.imread('sea.jpg', flags=cv2.IMREAD_GRAYSCALE)
      17. k3 = ndimage.convolve(img, kernel_3x3)
      18. k5 = ndimage.convolve(img, kernel_5x5)

      19. GBlur = cv2.GaussianBlur(img, (11, 11), 0)
      20. g_hpf = img - GBlur

      21. cv2.imshow('img', img)
      22. cv2.imshow('3x3', k3)
      23. cv2.imshow('5x5', k5)
      24. cv2.imshow('g_hpf', g_hpf)
      25. cv2.waitKey()
      26. cv2.destroyAllWindows()

      4、低通濾波器

      低通濾波器則在像素與周圍像素的亮度差值小于一個特定值時,平滑該像素的亮度,主要用于去噪和模糊化。

       

      5、邊緣檢測

      邊緣檢測不管是在人類視覺還是計算機(jī)視覺中都是非常重要的,我們能識別物體,就是靠邊緣。這個很容易理解,夜晚很黑什么都看不到,不就是因為沒看到物體的邊緣嗎?

      OpenCV提供了很多邊緣檢測的濾波函數(shù),比如,Laplacian, Sobel, Scharr, Canny等。這些函數(shù)會將非邊緣區(qū)域轉(zhuǎn)為黑色,將邊緣區(qū)域轉(zhuǎn)為白色或其他顏色。但是,這些函數(shù)容易將噪聲錯誤的失敗為邊緣,所以,在邊緣檢測之前,應(yīng)該對圖像進(jìn)行模糊處理。

      OpenCV提供了很多模糊濾波器,比如blur, medianBlur, GausianBlur等,邊緣檢測濾波器和模糊濾波器總有一個ksize參數(shù),這個參數(shù)表示濾波核的寬高,是一個奇數(shù)。還是來個代碼吧,

      1. import cv2

      2. img = cv2.imread('car.jpg', flags=cv2.IMREAD_GRAYSCALE)
      3. GBlur = cv2.GaussianBlur(img, (3, 3), 0)
      4. canny = cv2.Canny(GBlur, 50, 150)
      5. cv2.imshow('img', img)
      6. cv2.imshow('canny', canny)
      7. cv2.waitKey(0)
      8. cv2.destroyAllWindows()

      運行結(jié)果,

      6、邊界框、最小矩形區(qū)域、最小閉圓的輪廓

      實際應(yīng)用中經(jīng)常會對目標(biāo)的邊界框、最小矩形區(qū)域、最小閉圓特別感興趣。用cv2.findContours函數(shù)很容易實現(xiàn)上述功能。上代碼,

      1. #encoding:utf-8
      2. import cv2
      3. import numpy as np

      4. #讀取圖片
      5. img = cv2.imread('Picture1.png', cv2.IMREAD_UNCHANGED)
      6. #降低分辨率,也可以不降低
      7. # img = cv2.pyrDown(img)

      8. #對圖像進(jìn)行二值化操作
      9. ret, thresh = cv2.threshold(cv2.cvtColor(img.copy(), cv2.COLOR_BGR2GRAY), 127, 255, cv2.THRESH_BINARY)

      10. #檢測輪廓,
      11. #輸入的三個參數(shù)分別為:輸入圖像、層次類型、輪廓逼近方法
      12. #因為這個函數(shù)會修改輸入圖像,所以上面的步驟使用copy函數(shù)將原圖像做一份拷貝,再處理
      13. #返回的三個返回值分別為:修改后的圖像、圖輪廓、層次
      14. image, contours, hier = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

      15. for c in contours:
      16. #邊界框
      17. x, y, w, h = cv2.boundingRect(c)
      18. cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)

      19. #最小矩形區(qū)域
      20. rect = cv2.minAreaRect(c)
      21. box = cv2.boxPoints(rect)
      22. box = np.int0(box)
      23. cv2.drawContours(img, [box], 0, (0, 0, 255), 3)

      24. #最小閉圓
      25. (x, y), radius = cv2.minEnclosingCircle(c)
      26. center = (int(x), int(y))
      27. radius = int(radius)
      28. img = cv2.circle(img, center, radius, (255, 0, 0), 2)

      29. cv2.imshow('image', image)
      30. cv2.drawContours(img, contours, -1, (255, 0, 0), 1)
      31. cv2.imshow("contours", img)
      32. cv2.waitKey(0)

      運行結(jié)果:

      總結(jié):

      基礎(chǔ)知識先學(xué)這么多,后續(xù)再通過實例慢慢學(xué),本來想加上攝像頭的操作,無奈電腦沒有攝像頭,已經(jīng)在淘寶了,后續(xù)實例中再補(bǔ)了。

       

       

      如果您感覺本篇博客對您有幫助,請打開支付寶,領(lǐng)個紅包支持一下,祝您掃到99元,謝謝~~

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多