python-opencv-圖像的按位運算


OpenCV中為我們提供了四種按位運算,分別是按位與、按位或、按位非和按位異或。圖像的按位運算本質上就是對像素點值的按位運算,接觸過計算機知識的人應該知道,按位運算是針對二進制數而言的,也就是說只有0和1兩個值,因此,我們在對圖像進行按位運算時,需要將圖像轉化成灰度圖。

假設現在我們有一張五環圖像,我們要用它給其他圖像做水印,但是它的底色是純白色的,我們首先需要處理底色。

 

 

 

 

 

·閾值二值化
灰度圖共分256(0~255)階,從按位運算的角度出發,純黑色為0,不是純黑色為1。因此當碰到純白色或者純黑色的背景時,我們可以先將其轉為灰度圖,再利用閾值將非背景色的內容摳出來作為模板,再與原圖做位操作,進行樞圖

在OpenCV中,我們使用threshold(src,thresh,maxval,type,dst=None)函數來實現圖像的固定閾值二值化,即將圖像中閾值內的圖形摳出

import cv2

logo = cv2.imread("wuhuan.jpg",1)
height,width =logo.shape[0], logo.shape[1]
gray=cv2.cvtColor(logo,cv2.COLOR_BGR2GRAY)  #將logo轉為灰度
cv2.imshow('gray', gray)
ret, mask =cv2.threshold(gray,240,255, cv2.THRESH_BINARY)
'''
參數1 必選參數。表示輸入圖像,注意只能是灰度圖
參數2 必選參數。表示要設置的閾值,也是整個函數最關鍵的參數。
參數3 必選參數。當像素值超過閾值或小於閾值(具體根據type來決定)時所賦予的值。
參數4 必選參數。二值化操作的類型:
        THRESH_BINARY(超過閾值時的像素值為maxval(參數3),否則為0)
        THRESH_BINARY_INV(小於閾值的像素值為maxval(參數3),否則為0)
函數有兩個返回值,其中ret就是我們設置的閾值,mask為經過閾值二值化處理后的圖像
'''
cv2.imshow('dst', mask)
cv2.waitKey()

效果圖:

 

 

按位非:

import cv2

logo = cv2.imread("wuhuan.jpg",1)
height,width =logo.shape[0], logo.shape[1]
gray=cv2.cvtColor(logo,cv2.COLOR_BGR2GRAY)
ret, mask =cv2.threshold(gray,240,255, cv2.THRESH_BINARY)
cv2.imshow('yuan', mask)
mask_inv = cv2.bitwise_not(mask)  #圖像按位非操作
#按位非操作其實就是對像素值取反,原來是1的變為0,原來是0的變為1。
cv2. imshow('dst', mask_inv)
cv2.waitKey()

效果圖:

 

按位與: 

import cv2

logo = cv2.imread("wuhuan.jpg",1)
cv2.imshow('wuhuan', logo)
height,width =logo.shape[0], logo.shape[1]
gray=cv2.cvtColor(logo,cv2.COLOR_BGR2GRAY)
ret, mask =cv2.threshold(gray,240,255, cv2.THRESH_BINARY)

mask_inv = cv2.bitwise_not(mask)
logo_bg=cv2.bitwise_and(logo,logo,mask=mask_inv)  #按位與--帶掩碼
#mask起掩碼作用,當mask像素不為0時,做正常與操作,當mask像素為0時直接做0處理
#【mask為黑白圖像時:純白色部分進行正常的按位操作,mask為非純白色部分設置為0即黑色】
cv2. imshow('mask_inv', mask_inv)
cv2.imshow('dsy', logo_bg)
cv2.waitKey()

按位與運算法則如下(&為按位與運算符):1&1=1,1&0=0,0&1=0,0&0=0

效果圖:

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM