[python opencv 計算機視覺零基礎到實戰] 六、圖像運算

一、學習目標

  1. 了解opencv中圖像運算的方法
  2. 了解opencv中圖像運算的運用

如有錯誤歡迎指出~

二、了解OpenCV中圖像運算的運用

目錄

[python opencv 計算機視覺零基礎到實戰] 一、opencv的helloworld

[【python opencv 計算機視覺零基礎到實戰】二、 opencv文件格式與攝像頭讀取] 一、opencv的helloworld

[[python opencv 計算機視覺零基礎到實戰] 三、numpy與圖像編輯] 一、opencv的helloworld

[[python opencv 計算機視覺零基礎到實戰] 四、了解色彩空間及其詳解] 一、opencv的helloworld

[[python opencv 計算機視覺零基礎到實戰] 五、對象追蹤] 一、opencv的helloworld

推薦

歡迎大家關注公眾號,公眾號每滿1024及1024倍數則會抽獎贈送機械鍵盤一份+IT書籍2份喲~
在這里插入圖片描述

2.1 了解圖像間的加法

在opencv中可以使兩張圖片進行組合相加,使用add方法。兩張圖片進行相加其實是具體的數值進行運算,從而得到結果。需要注意的是進行運算的圖片大小必須一致,例如:

以上是我三張圖片的尺寸大小數據。每張圖片如下:
1bit:

1bit2:

1bit3:

我們可以先將圖片1bit與圖片1bit3做加法運算。opencv提供了add方法給我們對兩個圖片做加法運算。add方法接收圖片作為參數,將會返回計算后的圖片結果。代碼如下:

img=cv2.add(img1,img3)

代碼很簡單,在此不做過多講解。完整代碼如下:

import cv2img1 = cv2.imread(r'C:\Users\mx\Desktop\1bit.jpg')
img3 = cv2.imread(r'C:\Users\mx\Desktop\1bit3.jpg')
cv2.namedWindow("addImage",cv2.WINDOW_NORMAL)
img=cv2.add(img1,img3)
cv2.imshow("addImage", img)
cv2.waitKey (0)
cv2.destroyAllWindows()

運行結果如下:

從結果得知,使用add方法運算后,結果為將圖片1bit中的文章覆蓋在了圖片1bit3之上,這是為什么呢?我們可以從數值上考慮,由于數值類型是uint8,白色的值為255,加再多就到頂了,那么兩個圖片相加后,白色依舊會顯示,那么我們的數值此時將會照原樣輸出;黑色區域則是0,0加上任何數等于任何數,此時將會得到原本掉值,所以黑色加法運算后最后顯示的值將會與另外一張圖片的值一致,并不會產生其它的結果。

那我換成圖片1bit2呢?圖片1bit2字體是黑色,值為0,其它區域為白色為255,此時兩個圖片進行相加的結果部分同學可能就很清楚了,白色區域依舊是白色,黑色可能會顯示當前坐標區域的顏色值。更改代碼:

img2 = cv2.imread(r'C:\Users\mx\Desktop\1bit2.jpg')
img=cv2.add(img2,img3)


運行結果如下:

此時將會得到一張混有另外一張圖片顏色的字體。其實在我們平時處理一些圖片的時候可以使用這個攻做成比較好看的文字。

2.2 了解圖像的其它運算方法

在opencv中也可以使兩張圖片進行組合相減,使用subtract方法,subtract方法與add方法類似,接收圖片為參數,返回運算后的圖片結果,代碼如下:

import cv2
img2 = cv2.imread(r'C:\Users\mx\Desktop\1bit2.jpg')
img3 = cv2.imread(r'C:\Users\mx\Desktop\1bit3.jpg')
cv2.namedWindow("subtractImage",cv2.WINDOW_NORMAL)
img=cv2.subtract(img2,img3)
cv2.imshow("subtractImage", img)
cv2.waitKey (0)
cv2.destroyAllWindows()

結果如下:

此時黑色值為0,已經最低了,白色為255,白色值將會減去原有的色彩值,之后就會出現如上圖所示的情況。這個時候用黑色字體的“我是1_bit”進行減法運算得到的結果可以說并不是很好看,我們可以使用白色字體的圖片1bit去進行相減,更改圖片:

img=cv2.subtract(img1,img3)

結果如下:

看來草率了,應該換更好看的底圖,若是底圖好看,我們處理后的文字將會有別一樣的風味。

乘法使用multiply方法,用法一樣,也是通過圖片的數值進行計算,由于用法一致不過多贅述,結果如下:

除法使用divide,結果如下:

2.3 了解圖像的均值與方差

圖片之間的像素均值可以得到當前圖片的整體色彩偏亮或者偏暗,值越小那么該值就越暗,值越高則反之更亮。均值使用方法mean計算。mean接收一個圖片數據,返回一個均值結果。現在我用前面幾個小點提到的1bit3圖片作為均值獲取,改圖片是屬于偏亮的圖片,代碼如下:

img3 = cv2.imread(r'C:\Users\mx\Desktop\1bit3.jpg')
print(cv2.mean(img3))

結果如下:

從結果上很容易看得出,均值所表示的信息是偏亮,是正確的。

接下來我們使用方法meanStdDev計算方差。方差在opencv中可以表示該圖片的對比度,或者說該圖片是否從表現上有“意義”。若方差值大則表示差異比較大,若值小,則表示該圖片可能都是一種類似顏色,對比度不高,也就是相對的模糊。meanStdDev接收圖片數據為參數,返回一個均值與一個方差。代碼如下:

img3 = cv2.imread(r'C:\Users\mx\Desktop\1bit3.jpg')
print(cv2.mean(img3))
print('--------------')
print(cv2.meanStdDev(img3))

結果如下:

我們可以從結果中看到,均值是一致的,那么剩下的就是方差,該方差值沒有對照組并不能很好的反應出圖片的對比度。我們更換另外一張圖片:

運行結果如下:

我們可以看到所算出來的方差值是非常小的。我們再更換一張圖查看。

結果如下:

這張圖的值也是相對比較小的方差值。
本系列文章首發于ebaina

三、總結

  1. 了解了opencv中圖像加法運算使用add方法
  2. 了解了opencv中圖像減法運算使用subtract方法
  3. 了解了opencv中圖像乘法運算使用multiply方法
  4. 了解了opencv中圖像除法運算使用divide方法
  5. 了解了opencv中圖像均數運算使用mean方法
  6. 了解了opencv中圖像方差運算使用meanStdDev方法
  7. 了解了opencv圖像運算是使用圖像數值運算

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

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

相關文章

Android之SubsamplingScaleImageView加載長圖不能放縮問題

1 問題 第三方開源框架用了這個第三方開源框架(SubsamplingScaleImageView)加載長圖,但是源代碼在有些手機上面不能進行放縮。 private void displayLongPic(Uri uri, SubsamplingScaleImageView longImg) {longImg.setQuickScaleEnabled(tr…

java barrier_Java并發類CyclicBarrier方法詳解

Cyclic是周期的意思,Barrier是關卡的意思。CyclicBarrier不僅有CountDownLatch的功能,還可以實現屏障等待,即階段性同步。因此適用于,需要循環地實現線程一起做任務的目標。CyclicBarrier允許一組線程相互等待,直到到達…

【ArcGIS風暴】實驗:公路建設成本的計算

實驗平臺:ArcGIS 9.3實驗目的:學習和掌握公路建設成本的計算方法實驗要求:熟練掌握如何生成通行成本層、計算成本距離,并學會計算最佳路徑,且對成本距離與直線距離進行比較。實驗數據:ArcEx7實驗步驟:生成通行成本層1.打開Arcmap,加載數據ArcEX7,如圖 2.執行spatial …

[leetcode]347. Top K Frequent Elements

Given a non-empty array of integers, return the k most frequent elements. For example,Given [1,1,1,2,2,3] and k 2, return [1,2]. Note: You may assume k is always valid, 1 ≤ k ≤ number of unique elements.Your algorithms time complexity must be better th…

合并Spark社區代碼的正確姿勢

原創文章,轉載請保留出處 最近剛剛忙完Spark 2.2.0的性能測試及Bug修復,社區又要發布2.1.2了,國慶期間剛好有空,過了一遍2.1.2的相關JIRA,發現有不少重要修復2.2.0也能用上,接下來需要將有用的PR合到我們內…

.NET 中 GC 的模式與風格

垃圾回收(GC)是托管語言必備的技術之一。GC 的性能是影響托管語言性能的關鍵。我們的 .NET 既能寫桌面程序 (WINFROM , WPF) 又能寫 web 程序 (ASP.NET CORE),甚至還能寫移動端程序。。。不同使用場景的程序對 GC 的風格也有不同的要求&#…

(轉)java中的 | ^ 分別是什么?

|是按位或 ^是按位抑或 &是按位與比如有兩個數 int x 5;int y 11;System.out.println(x|y);System.out.println(x&y);System.out.println(x^y);結果是15, 1 ,14 過程 x5 (0101二進制) y11(1011二進制) x|y 1111 15 x&y 0001 1 x…

[python opencv 計算機視覺零基礎到實戰] 七、邏輯運算與應用

一、學習目標 了解opencv中圖像的邏輯運算了解opencv中邏輯運算的應用 目錄 [python opencv 計算機視覺零基礎到實戰] 一、opencv的helloworld [【python opencv 計算機視覺零基礎到實戰】二、 opencv文件格式與攝像頭讀取] 一、opencv的helloworld [[python opencv 計算機…

Android之如何判斷當前是阿拉伯布局的方法

1 問題 判斷當前是不是阿拉伯布局的方法 2 幾種判斷方法 @SuppressLint("NewApi")public static boolean isLayoutRtl(View view, Resources res) {if (res == null || view == null) return false;Locale curLocale = res.getConfiguration().locale;//如果當前語言…

【ArcGIS風暴】數字化實驗:數據采集與編輯完整操作流程

一.實驗平臺:ArcGIS 9.3 二.實驗目的:對甘肅省的十四個地級市進行圖像配準、數據采集。 三.實驗要求:掌握地理數據采集方法,圖像配準及坐標投影,選擇主要的點、線、面進行投影。 四.實驗數據:甘肅省統計數據,甘肅省行政區劃圖。 (一).影像配準 第一步:加載…

loadrunner java 參數化_LoadRunner 參數化詳解

LoadRunner,是一種預測系統行為和性能的負載測試工具。通過以模擬上千萬用戶實施并發負載及實時性能監測的方式來確認和查找問題,LoadRunner能夠對整個企業架構進行測試。通過使用 LoadRunner,企業能最大限度地縮短測試時間,優化性…

Android之實現RTL的ViewPager

1 問題 如何實現RTL的ViewPager,就是滑動方向和我們之前滑動的方向相反,比如一般,我們用ViewPager滑動4個圖片,依次順序是 1 2 3 4 ,我們在頁面1的時候,我們一般都是習慣向左滑動到2,現在需要實現手指向右滑動到2. 2 解決辦法 1)我們可以使用ViewPager2,這個是可以支…

Why Apache Spark is a Crossover Hit for Data Scientists [FWD]

Spark is a compelling multi-purpose platform for use cases that span investigative, as well as operational, analytics. Data science is a broad church. I am a data scientist — or so I’ve been told — but what I do is actually quite different from what oth…

Blazor University (21)使用 RenderFragments 模板化組件 —— 傳遞占位符

原文鏈接:https://blazor-university.com/templating-components-with-renderfragements/passing-placeholders-to-renderfragments/將占位符傳遞給 RenderFragments源代碼[1]說明:此頁面的靈感來自用戶 ?ister?agoo 的 Twitter 帖子。首先&#xff0c…

物聯網(車聯網)平臺架構方案

技術支持QQ:787728951、車載終端網關采用mina/nettyspring架構,獨立于其他應用,主要負責維護接入終端的tcp鏈接、上行以及下行消息的解碼、編碼、流量控制,黑白名單等安全控制,網關同時支持交通部JT/T808-2011、JT/T80…

[python opencv 計算機視覺零基礎到實戰] 八、ROI泛洪填充

一、學習目標 了解什么是ROI了解floodFill的使用方法 如有錯誤歡迎指出~ 目錄 [python opencv 計算機視覺零基礎到實戰] 一、opencv的helloworld [【python opencv 計算機視覺零基礎到實戰】二、 opencv文件格式與攝像頭讀取] 一、opencv的helloworld [[python opencv 計…

【經典回放】JavaScript學習詳細干貨筆記之(二)

【經典回放】JavaScript學習詳細干貨筆記之(一) 【經典回放】JavaScript學習詳細干貨筆記之(二) 【經典回放】JavaScript學習詳細干貨筆記之(三) 一、JavaScript 數組 JavaScript數組的定義、使用都是非常簡單的,從a17.htm就可以知道,僅僅定義的話,就使用: var …

java string類api_java基礎—String類型常用api

1、字符串比較equalsequalsIgnoreCase 忽略大小寫做比較2、字符串拆分(切片)splitString a "lemon:python:Java";//split切片之后的結果是一個一維字符串類型數組String[] arr a.split(":");for(int i 0 ;i System.out.println(arr[i]);}3、字符串截取…

解決沖突

人生不如意之事十之八九,合并分支往往也不是一帆風順的。 準備新的feature1分支,繼續我們的新分支開發: $ git checkout -b feature1 Switched to a new branch feature1修改readme.txt最后一行,改為: Creating a new …

Android之java.lang.OutOfMemoryError: Failed to allocate a ** byte allocation with **free bytes and 2M

1 問題 glide加載圖片出現oom java.lang.OutOfMemoryError: Failed to allocate a 23970828 byte allocation with 2097152 free bytes and 2MB until OOM 2 解決辦法 1) 簡單粗暴點的在AndroidManifest.xml添加如下,增大安卓虛擬機內存 android:largeHeap"…