「python opencv視覺零基礎實戰」七邏輯運算應用

2021-01-12 1bit愛學習

一、學習目標

了解opencv中圖像的邏輯運算了解opencv中邏輯運算的應用如有錯誤歡迎指出~

目錄

「python opencv 計算機視覺零基礎實戰」 第一節

「python opencv視覺入門到實戰」二、格式與攝像頭

「python opencv 視覺入門到實戰」 三、圖像編輯

「python opencv視覺入門到實戰」 第四節色彩空間

「python opencv視覺入門到實戰」 五、對象追蹤

「python opencv視覺零基礎到實戰」 六、圖像運算

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

2.1 了解and邏輯運算

在上一節中,我們了解了基本的圖像運算,這一節將了解在opencv將兩張圖片進行邏輯運算。邏輯運算在編程中較為常見的一種基本運算,在此不再進行贅述。我們首先了解一下opencv中的邏輯與運算,opencv中邏輯與運算與我們基本的邏輯與運算一致,也就是1 and 1為1,1 and 0 為0。我們可以通過一個小示例來直觀的感受opencv的and運算方式。

在opencv中,對兩個圖片進行邏輯與運算需要使用bitwise_and方法。bitwise_and方法接收2個圖片數組為參數。首先我們讀取2個圖片1bit與1bit3。

import cv2img1 = cv2.imread(r'C:\Users\mx\Desktop\1bit.jpg')img3 = cv2.imread(r'C:\Users\mx\Desktop\1bit3.jpg')cv2.imshow("img1", img1)cv2.imshow("img3", img3)cv2.waitKey (0)cv2.destroyAllWindows()得到兩張圖片如下:

隨後使用bitwise_and方法對兩張圖片進行運算:

import cv2img1 = cv2.imread(r'C:\Users\mx\Desktop\1bit.jpg')img3 = cv2.imread(r'C:\Users\mx\Desktop\1bit3.jpg')and_img=cv2.bitwise_and(img3,img1)cv2.namedWindow("and_img",cv2.WINDOW_NORMAL)cv2.imshow("img1", img1)cv2.imshow("img3", img3)cv2.imshow("and_img", and_img)cv2.waitKey (0)cv2.destroyAllWindows()以上代碼中關鍵代碼為and_img=cv2.bitwise_and(img3,img1),在這一串代碼中對img3與img1進行了邏輯與運算。由於img1圖片只有「我是1_bit」文字為白色,其他區域為黑色,我們可以當成「我偶是1_bit」這個內容區域的值為1,然後黑色區域位置為0。這時黑色區域與img3圖片的通道區域值進行計算,那就是0與一個內容值進行邏輯與計算,那麼結果為0,img1的文字部分值為1,與img3圖片相同的位置進行邏輯與計算,那麼保留結果。這時,運算後的圖片則應該是生成一張帶有「我是1_bit」字樣的圖片,並且在字樣區域內帶有img3圖片內容。結果如下:

那將圖片img1改成如下情況呢:

這時「我是1_bit」』字樣區域的內容將會與另一張圖片計算後排出,這時結果將會產生一個0值的空缺部分,由於空白部分的值為1,邏輯運算後將會保留白色區域的另外一張圖片內容。

結果如下:

2.2 了解or邏輯運算

在opencv中既然存在and邏輯與,那麼邏輯或大機率存在是可能的。在opencv中,邏輯或運算與邏輯與運算相反,使用bitwise_or方法,傳入參數也是兩張用於邏輯計算的圖片。使用示例如下:

import cv2img1 = cv2.imread(r'C:\Users\mx\Desktop\1bit.jpg')img3 = cv2.imread(r'C:\Users\mx\Desktop\1bit3.jpg')and_img=cv2.bitwise_or(img3,img1)cv2.namedWindow("and_img",cv2.WINDOW_NORMAL)cv2.imshow("img1", img1)cv2.imshow("img3", img3)cv2.imshow("and_img", and_img)cv2.waitKey (0)cv2.destroyAllWindows()結果如下:

以上使用的圖片與2.1示例中圖片一致。邏輯或運算,只要不都為0則是1。圖片img1中,字體為白,其它部分為0,但由於進行邏輯運算時,黑色部分進行計算的區域對應img3是有內容的,也就是說img3中該部分的內容非0。那麼,結果就是img3中的圖片內容,最終將會得到如上結果。

2.3 了解取反運算

取反運算非常簡單,就是黑的變白,白的變黑;當然這樣說不嚴謹,但是卻很好反應了取反這個操作的結果;例如0取反則是1,1取反則是0。取反使用bitwise_not方法,bitwise_not方法接收一個圖片參數。以下方法依舊使用名為1bit的圖片。圖片為了方便查看在代碼中顯示了原圖內容。

import cv2img1 = cv2.imread(r'C:\Users\mx\Desktop\1bit.jpg')not_img=cv2.bitwise_not(img1)cv2.imshow("img1 ", img1 )cv2.imshow("not_img", not_img)cv2.waitKey (0)cv2.destroyAllWindows()結果如下:

2.4 邏輯運算有什麼用呢?

我們在前兩節中的值,可以通過inRange方法提取圖片中的指定顏色內容,但是提取出來後將會得到一個黑白圖片,那麼如何對改圖片進行顏色的還原呢?想必有些同學學完邏輯運算後覺得應該是找到了方法。是的,我們可以通過邏輯運算對圖片進行顏色上的還原。因為我們提取出來的圖片是黑白圖片,提取出來指定顏色內容的區域為白色,那麼只需要將圖片與原圖進行and運算,那麼重合的部分就會顯示出來,這個時候就可以還原提取後圖片的顏色。但是,我們是哪個顏色提取出來的圖片是單通道的灰度圖片,怎麼辦呢?不急,首先我們把之前的代碼貼上,方便查看:

import cv2import numpy as npcapture=cv2.VideoCapture(r'C:\Users\mx\Desktop\hmbb.mp4')min=np.array([26,43,46])max=np.array([34,255,255])while True: r,img=capture.read() if r==False: break hsv_img=cv2.cvtColor(img,cv2.COLOR_BGR2HSV) flag=cv2.inRange(hsv_img,lowerb=min,upperb=max) cv2.imshow("flag", flag) cv2.imshow("hmbb", img) k=cv2.waitKey (40) if k==27: breakcv2.destroyAllWindows()以上代碼已經在前兩節「對象跟蹤」小節講解,那麼現在只需要對提取到的圖片與原圖進行一個and邏輯運算即可,添加以下代碼:

cflag=cv2.bitwise_and(img,img,mask=flag)以上代碼bitwise_and添加了兩個相同的img參數,為什麼添加呢?不急,下一節將會告訴大家。我們現在著重查看mask參數,mask參數賦值為提取到的flag目標區域的圖片,表示遮罩。將會在之前傳入的img中剔除不要的區域,只保留白色的區域,傳入的類型是8位單通道的灰度圖像。這時我們就可以將flag值賦值給mask,bitwise_and將會從img圖片中做邏輯運算去除我們不需要的黑色區域的圖片內容,這時將會得到一個顏色比較正常的海綿寶寶。完整代碼如下:

import cv2import numpy as npcapture=cv2.VideoCapture(r'C:\Users\mx\Desktop\hmbb.mp4')img1 = cv2.imread(r'C:\Users\mx\Desktop\1bit.jpg')min=np.array([26,43,46])max=np.array([34,255,255])while True: r,img=capture.read() if r==False: break hsv_img=cv2.cvtColor(img,cv2.COLOR_BGR2HSV) flag=cv2.inRange(hsv_img,lowerb=min,upperb=max) cflag=cv2.bitwise_and(img,img,mask=flag) cv2.imshow("flag", flag) cv2.imshow("hmbb", img) cv2.imshow("cflag", cflag) k=cv2.waitKey (40) if k==27: breakcv2.destroyAllWindows()結果如下:

文章首發於ebaina邏輯運算的更多內容下一節將會講解。

三、總結

了解了opencv中對圖像進行邏輯與運算使用bitwise_and方法了解了opencv中對圖像進行邏輯或運算使用bitwise_or方法了解了opencv中對圖像進行取反運算使用bitwise_not方法了解了and方法的其他用途,用於mask遮罩剔除不需要的內容

相關焦點

  • 「python opencv計算機視覺零基礎到實戰」九模糊
    一、學習目標了解什麼是卷積了解模糊的使用方法與應用目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰」 第四節色彩空間
  • 「python opencv視覺零基礎」十四、直方圖反向投影
    前文提醒:博主正在參加博客之星評比,成功入選Top200,現在暫居第九歡迎各位點擊了解更多幫我投票,非常感謝~目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python
  • 「python opencv視覺零基礎」十、圖片效果毛玻璃
    一、學習目標了解高斯模糊的使用方法了解毛玻璃的圖片效果添加了解如何自己做一個噪聲圖片目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰
  • 「python opencv視覺零到實戰」八、圖片選區操作
    一、學習目標了解什麼是ROI了解floodFill的使用方法如有錯誤歡迎指出~目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰
  • 世界上最好的語言PHP:OpenCV與計算機視覺已在我掌控之下
    現今,「機器學習」發展迅速,並有大量相關的文章,包括那些 Medium 上的博客,同時幾乎每位開發人員都開始在工作任務和本地項目中使用機器學習,但是從何處開始以及使用什麼方法總是令人困惑的。大多針對初學者的文章提供了一堆文獻,在閱讀中發現這些文章脫離生活,或提供一些「價」的課程等。
  • 如何快速簡單的安裝opencv-python
    這樣就會從清華鏡像安裝opencv-contrib-python庫。目前opencv最新版本為4.1.1 ----2019-8-28在opencv-contrib-python 版本中含有額外模塊( Extra modules ),而 opencv-python 版本中只含有基礎模塊。
  • 使用OpenCV和Python構建自己的車輛檢測模型
    應用程式是無止境的!我們人類可以很容易地在一瞬間從複雜的場景中檢測和識別出物體。然而,將這種思維過程轉化為機器的思維,需要我們學習使用計算機視覺算法進行目標檢測。因此在本文中,我們將建立一個自動車輛檢測器和計數器模型。以下視頻是你可以期待的體驗:https://youtu.be/C_iZ2yivskE注意:還不懂深度學習和計算機視覺的新概念?
  • 「python學習手冊-筆記」003.數值類型
    「這不是演習!」好了,從本章開始,我們就要正式進入python的學習.所涉及的內容深度會有所提升,但是還到不了學習完1+1=2之後就開始微積分推導的陡峭程度. 相關的補充內容我會以知識點補充或者外鏈的方式添加進來.
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    教程大合集,包含python所有就業方向,每套課程均來自市面上主流培訓機構的原版教程,價值都在數百元以上 每套課程均包含:視頻課程+課件+原始碼 重要:建議根據自己工作方向和需求,重點選擇2到3套課程學精,吃透,然後在工作 重要:零基礎小白建議先選擇零基礎全能篇的一套課程學精,然後再根據自 己的需求和規劃選擇學習其他方向課程,學完後一定要多實踐
  • 「深度學習之opencv」Mat數據的矩陣輸出
    C++中使用opencv的時候,我們有事想看一下我們的圖像的數據,那麼怎麼將一個圖像數據輸出呢?sizeMat的默認輸出風格:默認風格Mat的Python輸出風格,就是python實際上,這不僅限於深度學習和計算機視覺,還包括模型算法原理,模型訓練,模型轉換優化,模型部署和深度學習框架。此外,還有C ++,數據結構和編譯底層等。歡迎大家的關注,我們將共同探討進步。
  • Python中如何利用Opencv打開視頻或圖像並用PyQt控制項顯示
    OpenCV是一個基於BSD許可(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Windows、Android和Mac OS作業系統上,使用起來十分方便,把它與PyQt結合起來,就可以順利的操作視頻、圖像了。具體安裝請自行百度,這裡介紹使用方法。
  • 基於python+OpenCV模塊的人臉識別定位技術
    什麼是OpenCV模塊OpenCV是一款跨平臺的視覺庫,可以支持的作業系統有Linux、Windows和Mac OS作業系統,並且還提供了多種語言的接口,比如Python,java,MATLAB等常用語言。
  • opencv-python獲取圖像:面向對象與面向過程
    這裡需要注意以下,opencv讀取圖片默認通道為BGR的格式,當在其他UI用戶界面顯示圖像時注意轉換一下通道順序,例如BGR轉換成RGB:Image1=cv2.cvtColor(image, cv2.COLOR_BGR2RGB)下面讀取一張圖片並顯示
  • 基於opencv 的圖像處理入門教程
    前言雖然計算機視覺領域目前基本是以深度學習算法為主,但實際上很多時候對圖片的很多處理方法,並不需要採用深度學習的網絡模型,採用目前成熟的圖像處理庫即可實現,比如 OpenCV 和 PIL ,對圖片進行簡單的調整大小、裁剪、旋轉,或者是對圖片的模糊操作。
  • opencv-python圖像預處理-濾波
    圖像濾波(模糊)濾波也叫模糊,下面是opencv中常見的五種濾波方法,先看一下濾波前後的效果。# -*- coding: utf-8 -*-"""運行環境 python==3.6 opencv-contrib-python== 4.1 win10系統第一行 「 # -*- coding: utf-8 -*- 」 告訴Python解釋器,按照UTF-8編碼讀取原始碼"""dir1="lena.jpg"
  • python教程之python數學運算
    中進行分數(fraction)運算分數運算是python中的一個模塊(module)。#對分數進行運算>>> Fraction(2,8)+1+1.52.75運算中如果出現float數據類型,最終的結果將是float類型數據。如果運算式中只有integer類型和fraction類型,輸出結果將是fraction類型。
  • OpenCV中的快速直線檢測
    本文範例運行環境FastLineDetectors運行必要條件FastLineDetectors屬於opencv-contrib中的模塊,需要安裝opencv-contrib-python。在python的opencv相關的安裝包中,opencv-python 包含主要模塊,opencv-contrib-python 包含主要模塊以及一些擴展模塊。但這兩個模塊並不兼容,如果已經安裝過opencv-python,需要先卸載,再安裝opencv-contrib-python。
  • 基於TensorFlow 、OpenCV 和 Docker 的實時視頻目標檢測
    Docker在數據科學中的應用我不在這裡描述 Tensorflow 目標檢測 API 的實現,因為相關的文檔很多。我將展示數據科學家在日常工作中如何使用 Docker。注意,我會使用 Tensorflow 的經典 ssd_mobilenet_v2_coco 模型來提高性能。
  • 零基礎如何學習python
    雖然說Python比起其他幾大程式語言易學,但是零基礎沒有合理的學習路線學起來也會有些難度的。沒有合理的學習路線會導致你在浪費時間,使得對Python失去興趣,學習不到重點,下面給大家整理出來了Python零基礎的學習路線,希望能幫助到大家。
  • 基於OpenCv 和 Python 的手指識別及追蹤
    翻譯 | 餘杭 Lamaric 校對 | 吳曉曼 審核 | 餘杭詳細代碼參考:https://github.com/amarlearning/opencv手指追蹤是許多計算機視覺應用的重要特徵。在該應用中,使用基於直方圖的方法將手與背景幀分離。