日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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

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

------韋訪 20181011

1、概述

想學(xué)習(xí)圖像處理,不管是機(jī)器學(xué)習(xí)也好,深度學(xué)習(xí)也好,不會點(diǎn)OpenCV好像有點(diǎn)說不過去吧?所以,現(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)

運(yùn)行結(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)

運(yùn)行結(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)

運(yùn)行結(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ì)算機(jī)視覺中都是非常重要的,我們能識別物體,就是靠邊緣。這個很容易理解,夜晚很黑什么都看不到,不就是因?yàn)闆]看到物體的邊緣嗎?

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()

運(yùn)行結(jié)果,

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

實(shí)際應(yīng)用中經(jīng)常會對目標(biāo)的邊界框、最小矩形區(qū)域、最小閉圓特別感興趣。用cv2.findContours函數(shù)很容易實(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. #因?yàn)檫@個函數(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)

運(yùn)行結(jié)果:

總結(jié):

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

 

 

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

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多