opencv 常用操作指南

1.通道交換

讀取圖像,然后將RGB通道替換成BGR通道,需要注意的是,opencv讀取的圖像默認是BGR。cv2.cvtColor函數可以參考Color Space Conversions

img = cv2.imread('imori.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
cv2.imwrite('answer.png', img)

2.灰度化(Grayscale)

灰度化的計算公式為:

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

3. 二值化(Thresholding)

將大于閾值的像素值令為255,否則令為0。cv2.threshold函數可以參考Miscellaneous Image Transformations

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, img = cv2.threshold(img, 128, 255, cv2.THRESH_BINARY)

4. 大津二值化算法(Otsu's Method)

大津算法是一種可以自動確定二值化中閾值的算法。https://docs.opencv.org/master/d7/d4d/tutorial_py_thresholding.html?該頁面的"Otsu's Binarization"章節

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, img = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)

5. HSV變換

將使用HSV表示的圖像的色相反轉。需要注意的是色相(Hue)將顏色從0°到360°表示。HSV顏色模型可以參考https://baike.baidu.com/item/HSV/547122

img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 進行色相反轉
img[:, :, 0] = (img[:, :, 0] + 180) % 360
img = cv2.cvtColor(img, cv2.COLOR_HSV2BGR)

6. 減色處理

將圖像的值由?2563?壓縮至?43?,即RGB的值只取{32,96,169,224}

img = img // 64 * 64 + 32

7. 平均池化(Average Pooling)

將圖像按照固定大小網格分割,網格內的像素值取網格內所有像素的平均值。關于池化的操作似乎在opencv中沒找到,只找到了在skimage中的實現?https://stackoverflow.com/questions/42463172/how-to-perform-max-mean-pooling-on-a-2d-array-using-numpy

img = skimage.measure.block_reduce(img, (8, 8, 1), np.mean)

8. 最大池化(Max Pooling)

與平均池化類似

img = skimage.measure.block_reduce(img, (8, 8, 1), np.max)

9. 高斯濾波(Gaussian Filter)

使用高斯濾波器(?3×3?大小,標準差?�=1.3?)進行降噪處理。高斯濾波器將中心像素按照高斯分布加權平均進行平滑化。cv2.GaussianBlur函數可以參考OpenCV: Image Filtering。標準差?�=1.3?的8-緊鄰高斯濾波器為:

img = cv2.GaussianBlur(img, (3, 3), 1.3)

10. 中值濾波(Median Filter)

使用中值濾波器(?3×3?大小)進行降噪處理。cv2.medianBlur函數可以參考OpenCV: Image Filtering

img = cv2.medianBlur(img, 3)

11. 均值濾波器

使用均值濾波器(?3×3?大小)進行降噪處理。cv2.blur函數可以參考OpenCV: Image Filtering

img = cv2.blur(img, (3, 3))

12. Motion Filter

motion濾波好像并沒有直接可以調用,因此先定義一個卷積核kernel,再利用cv2.filter2D進行卷積。cv2.filter2D可以參考https://docs.opencv.org/master/d4/d86/group__imgproc__filter.html#ga27c049795ce870216ddfb366086b5a04

# 生成一個對角線方向的卷積核(kernel)
kernel = np.diag([1]*3) / 3
img = cv2.filter2D(img, -1, kernel)

motion濾波的效果可以參考https://docs.gimp.org/2.8/en/plug-in-mblur.html

13. MAX-MIN濾波器

MAX-MIN濾波器使用網格內像素的最大值和最小值的差值對網格內像素重新賦值。通常用于邊緣檢測。

erode和dilate都是形態學操作,分別相當于min濾波和max濾波,erode可以參考https://docs.opencv.org/master/d4/d86/group__imgproc__filter.html#gaeb1e0c1033e3f6b891a25d0511362aeb?dilate可以參考https://docs.opencv.org/master/d4/d86/group__imgproc__filter.html#ga4ff0f3318642c4f469d0e11f242f3b6c

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
kernel = np.ones((3,3))
img_max = cv2.dilate(img, kernel)
img_min = cv2.erode(img, kernel)
img = img_max - img_min

14. 差分濾波器(Differential Filter)

差分濾波器對圖像亮度急劇變化的邊緣有提取效果,可以獲得鄰接像素的差值。

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
kernel_y = np.array([[0, -1, 0],[0, 1, 0],[0, 0, 0]])
img_y = cv2.filter2D(img, -1, kernel)
kernel_x = np.array([[0, 0, 0],[-1, 1, -0],[0, 0, 0]])
img_x = cv2.filter2D(img, -1, kernel)

15. Sobel濾波器

Sobel濾波器可以提取特定方向(縱向或橫向)的邊緣。sobel濾波器可以參考OpenCV: Image Filtering。濾波器按下式定義:

縱向:

橫向:

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_x = cv2.Sobel(img, cv2.CV_64F, 1, 0)
img_y = cv2.Sobel(img, cv2.CV_64F, 0, 1)

16. Prewitt濾波器

Prewitt濾波器是用于邊緣檢測的一種濾波器,其函數可以參考https://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.prewitt.html

縱向:

橫向:

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_x = scipy.ndimage.prewitt(img, 1)
img_y = scipy.ndimage.prewitt(img, 0)

17. Laplacian濾波器

Laplacian濾波器是對圖像亮度進行二次微分從而檢測邊緣的濾波器。https://docs.opencv.org/master/d4/d86/group__imgproc__filter.html#gad78703e4c8fe703d479c1860d76429e6

縱向:

橫向:

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img = cv2.Laplacian(img,cv2.CV_64F)

18. Emboss濾波器

Emboss濾波器可以使物體輪廓更加清晰

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
kernel = np.array([[-2, -1, 0], [-1, 1, 1], [0, 1, 2]])
img = cv2.filter2D(img, -1, kernel)

19. Log濾波器

LoG即高斯-拉普拉斯(Laplacian of Gaussian)的縮寫,使用高斯濾波器使圖像平滑化之后再使用拉普拉斯濾波器使圖像的輪廓更加清晰。其函數可以參考https://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.gaussian_laplace.html

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img = scipy.ndimage.gaussian_laplace(img, sigma=3)

20. 直方圖繪制

繪制直方圖顯示不同數值的像素出現的次數。在 Matplotlib 中有 hist() 函數提供繪制直方圖的接口。https://matplotlib.org/api/_as_gen/matplotlib.pyplot.hist.html

img = cv2.imread('imori_dark.jpg').astype(np.float)
plt.hist(img.ravel(), bins=255, rwidth=0.8, range=(0, 255))
plt.savefig("answer.png")

21. 直方圖均衡化

直方圖均衡化是一種增強圖像對比度的方法,其主要思想是將一副圖像的直方圖分布變成近似均勻分布。其參考https://stackoverflow.com/questions/31998428/opencv-python-equalizehist-colored-image

img_yuv = cv2.cvtColor(img, cv2.COLOR_BGR2YUV)
# equalize the histogram of the Y channel
img_yuv[:,:,0] = cv2.equalizeHist(img_yuv[:,:,0])
# convert the YUV image back to RGB format
img_output = cv2.cvtColor(img_yuv, cv2.COLOR_YUV2BGR)

22. 伽馬校正

伽馬校正用來對照相機等電子設備傳感器的非線性轉換特性進行校正。如果圖像鴛鴦顯示在顯示器上,畫面就會顯得很暗。伽馬校正通過預先增大RGB值來排除顯示器的影響,達到對圖像修正的目的。其參考https://stackoverflow.com/questions/33322488/how-to-change-image-illumination-in-opencv-python/41061351

def adjust_gamma(image, gamma=1.0):invGamma = 1.0 / gammatable = np.array([((i / 255.0) ** invGamma) * 255for i in np.arange(0, 256)]).astype("uint8")return cv2.LUT(image, table)original = cv2.imread('imori_gamma.jpg')
gamma = 2.2                         
adjusted = adjust_gamma(original, gamma=gamma)
cv2.imwrite('answer.png', adjusted)

23. 常見的插值方法

包括雙三次、雙線性、最鄰近插值。

img = cv2.imread('imori.jpg')
height, width = img.shape[:2]
new_height, new_width = int(height/2), int(width/2)
# 雙三次
new_img = cv2.resize(img, (new_width, new_height), interpolation=cv2.INTER_CUBIC)
# 雙線性
new_img = cv2.resize(img, (new_width, new_height), interpolation=cv2.INTER_LINEAR)
# 最鄰近
new_img = cv2.resize(img, (new_width, new_height), interpolation=cv2.INTER_NEAREST)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/167683.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/167683.shtml
英文地址,請注明出處:http://en.pswp.cn/news/167683.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

1|1111

1、指定在每天凌晨4:00將該時間點之前的系統日志信息(/var/log/messages )備份到目錄下/backup,備份后日志文件名顯示格式logfileYY-MM-DD-HH-MM 2、配置ssh免密登陸:客戶端主機通過redhat用戶基于秘鑰驗證方式進行遠…

微服務實戰系列之Nginx

前言 Nginx?寫了那么多文章,為什么今天才輪到它的表演?那是因為它實在太重要了,值得大書特書,特別對待。 當我們遇到單點瓶頸,第一個idea是?Nginx; 當我們需要反向代理,…

機器學習/sklearn筆記:MeanShift

1 算法介紹 一種基于質心的算法通過更新候選質心使其成為給定區域內點的均值候選質心的位置是通過一種稱為“爬山”技術迭代調整的,該技術找到估計的概率密度的局部最大值 1.1 基本形式 給定d維空間的n個數據點集X,那么對于空間中的任意點x的均值漂移…

C#,《小白學程序》第一課:初識程序,變量,數據與顯示

曰:掃地僧練就絕世武功的目的是為了掃地更干凈。 1 引言 編程只是一項技術,如包包子,不是什么高深的科學。 學習程序最不好的方法是先學習枯燥的語法。 學習程序主要是用代碼解決問題。因此,我們拋開所有的語法與諸多廢物&…

React項目中發生空白但不報錯的原因分析和解決?

文章目錄 前言組件渲染問題狀態管理問題異步操作問題代碼錯誤但未拋出異常如果我們使用的是chorme瀏覽器的話,可以下載一個開發者工具,例如下圖:代碼審查使用調試工具日志和輸出檢查外部依賴異步操作終極大法,不到萬不得已不可以使…

python+gurobi求解線性規劃、整數規劃、0-1規劃

文章目錄 簡單回顧線性規劃LP整數規劃IP0-1規劃 簡單回顧 線性規劃是數學規劃中的一類最簡單規劃問題,常見的線性規劃是一個有約束的,變量范圍為有理數的線性規劃。如: 使用matlab的linprog函數即可求解簡單的線性規劃問題,可以參…

【Python 訓練營】N_6 求素數

題目 判斷101-200之間有多少個素數,并輸出所有素數。 分析 判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,則表明此數不是素數,反之是素數。 答案 h 0 leap 1 from math import sqrt from sys …

2023亞太地區數學建模C題思路模型代碼論文

C題的參考思路: 1,問題1的思路: 確定研究問題的主要指標體系(新能源電車的售出數量、安全性指標、充電樁數目、電池續 航里程等),收集指標的對應數據,檢驗數據是否服從正態性: 若服從正態分布: 0,可考慮優先采用“多元方差分析”模…

Python推導式

python推導式是一種獨特的數據處理方式,可以從一個數據序列構建到另一個新的數據序列的結構體。 Python支持各種數據結構的推導式: 1. 列表(list)推導式 [表達式 for 變量 in 列表] [out_exp_res for out_exp in input_list] or …

【?用運算放大器設計恒流電流源電壓4V-74V適應范圍 ?】2021-11-29

緣由用運算放大器設計恒流電流源-編程語言-CSDN問答直流恒流源設計,要求用到運算放大器-硬件開發-CSDN問答求助恒流驅動電路,運放端口電壓的問題? - 電路設計論壇 - 電子技術論壇 - 廣受歡迎的專業電子論壇!(不能實現恒流壞的電路設計反面例子…

OpenCV快速入門:特征點檢測與匹配

文章目錄 前言一、角點檢測1.1 角點特征1.1.1 角點特征概念1.1.2 角點的特點1.1.3 關鍵點繪制代碼實現1.1.4 函數解析 1.2 Harris角點檢測1.2.1 Harris角點檢測原理1.2.2 Harris角點檢測公式1.2.3 代碼實現1.2.4 函數解析 1.3 Shi-Tomasi角點檢測1.3.1 Shi-Tomasi角點檢測原理1…

GIT,解決遠程分支沖突

背景:當遠程分支A 與maste 有沖突如何解決–此時無法在這兩個版本之間merge 1、切換到master分支: git checkout master 2、更新master分支代碼: git pull 3、再次切換到自己新建的分支: git checkout add_login_check_func 4、將…

SuperMap iDesktopX如何獲取簡單線的起終端點及坐標

作者:超圖研究院技術支持中心-于丁 SuperMap iDesktopX如何獲取簡單線的起終端點及坐標 在GIS行業應用中,線數據的端點坐標有非常多的用處。 定位和可視化:線數據端點坐標可以用于定位和可視化線要素在空間中的位置。這對于地圖制作、規劃和…

初識Linux(1),看了這篇文章,媽媽再也不用擔心我Linux找不到門了。

文章目錄 前言1. ls 指令例如:只顯示文件名屬性ls顯示文件詳細屬性 ls - l 該操作可以簡寫成ll查看隱藏文件ls -l -a 2.pwd例如:顯示當前目錄所處的路徑類似于windows如下操作: 3.cd 指令例如:改變工作目錄相當于windows如下操作 4.whoami 指…

html幸運大轉盤抽獎(附源碼)

文章目錄 1.設計來源1.1 幸運大轉盤 風格11.2 幸運大轉盤 風格21.3 幸運大轉盤 風格31.4 幸運大轉盤 獎品效果1.5 幸運大轉盤 活動未開始1.6 幸運大轉盤 活動已結束1.7 幸運大轉盤 圖片源素材 2.效果和源碼2.1 動態效果2.2 源代碼 源碼下載 作者:xcLeigh 文章地址&a…

Windows power shell for循環

有時候需要重復執行某個shell命令 for($i1;$i -lt 10;$i$i1){echo $i}如果是cmd for /l %i in (1,1,5) do echo %i

vue 使用vuex中的data數據引用問題

先上代碼: this.userRoleInfo2 this.$store.state.userInfo this.userRoleInfo2.name 111 this.userRoleInfo2.orgName 222 this.userRoleInfo2.orgId 4444問題描述: 博主,定義了一個變量userRoleInfo2來接收了 從vuex中獲取了userInfo…

卷積神經網絡(Inception V3)識別手語

文章目錄 一、前言二、前期工作1. 設置GPU(如果使用的是CPU可以忽略這步)2. 導入數據3. 查看數據 二、數據預處理1. 加載數據2. 可視化數據3. 再次檢查數據4. 配置數據集 三、構建Inception V3網絡模型1.自己搭建2.官方模型 五、編譯六、訓練模型七、模型…

再生式收音機踩坑記

下載《A Simple Regen Radio for Beginners》這篇文章也有好幾年了,一直沒有動手,上周末抽空做了一個,結果相當令人沮喪,一個臺也收不到,用示波器測量三極管振蕩波形,只有在調節再生電位器R2過程中&#xf…

什么是合封芯片工藝,合封芯片工藝工作原理、應用場景、技術要點

芯片封裝技術不斷進步,其中合封芯片工藝作為一種先進的芯片封裝技術,“超”廣泛應用于各類電子設備中。 本文將從合封芯片工藝的工作原理、應用場景、技術要點等方面進行深入解讀。 一、合封芯片工藝 合封芯片工藝是一種將多個芯片或不同的功能的電子模…