目錄
1. 影像加法運算
(1)隨機生成灰度影像
(2)讀取原始影像
(3)兩影像相加
(4)影像像素點加常數
2. 影像減法運算
(1)減小亮度
(2)還原添加灰度影像的影像
3. 影像與運算
4. 影像或運算
5. 影像異或運算
6. 影像非運算
7. 影像邏輯運算的意義
結束語
1. 影像加法運算
影像加法運算是將一幅影像加在另外一幅影像上面或者對影像的某一個像素點值進行操作,加上一個常數改變其亮度或者顏色
(1)隨機生成灰度影像
參考資料:影像的像素加法、減法運算
import numpy as np
import cv2
#np.random.randint(a, b)生成大于等于 a 小于 b 的隨機整數
img_gray = np.random.randint(0, 256, size=[406, 600], dtype=np.uint8)#生成一張 406*600 的隨機灰度圖
cv2.namedWindow("gray")
cv2.imshow("gray", img_gray)
cv2.waitKey(delay = 0)

(2)讀取原始影像
首先是從電腦獲得已經下載的影像:
import numpy as np
import cv2
img1 = cv2.imread('E:\From Zhihu\For the desk\de.jpg') #讀取影像
cv2.namedWindow("awindow") #創建視窗
img1_1 = cv2.resize(img1, dsize= None, fx = 0.5, fy = 0.5)#對影像尺寸進行調整
cv2.imshow("awindow", img1_1) #顯示影像
cv2.waitKey(delay = 0) #等待
print(img1_1.shape) #讀取影像資訊

并得到影像的資訊:
(406, 600, 3) 影像的解析度以及通道,之前的灰度影像就是以這個影像的大小生成的
(3)兩影像相加
使用 cv2.addWeighted() 函式
該函式包括引數:影像1,影像1權值,影像2,影像2權值,為合成后的影像像素值所加的數
使用該函式時,兩影像解析度必須一致,影像通道數也要一致
本例中是將上面的灰度影像和讀取的影像相加得到的
主要實作方法如下,我已經添加了注釋
"""
Author:Huijun
date:2021/10/15
"""
import numpy as np
import cv2
img1 = cv2.imread('E:\From Zhihu\For the desk\de.jpg') #讀取影像
cv2.namedWindow("awindow") #創建視窗
img1_1 = cv2.resize(img1, dsize= None, fx = 0.5, fy = 0.5)#調整大小
img_gray0 = cv2.cvtColor(img1_1, cv2.COLOR_BGR2GRAY) #對影像進行灰度處理
cv2.imshow("awindow", img_gray0) #顯示影像
cv2.waitKey(delay = 0) #等待
img_gray = np.random.randint(0, 256, size=[406, 600], dtype=np.uint8)#生成隨機灰度圖
cv2.namedWindow("gray")
cv2.imshow("gray", img_gray)
print(img_gray.shape) #讀取灰度圖屬性
cv2.waitKey(delay = 0)
final_img = cv2.addWeighted(img_gray0, 0.8, img_gray, 0.2, 8) #將兩個圖相加
cv2.namedWindow("windowfinal")
cv2.imshow("windowfinal", final_img)
cv2.waitKey(delay = 0)
得到最終影像:

可以看出兩種影像相加,但還是能分辨出美女,這是因為我們在相加時將美女的權值調為 0.8 ,所以整張圖中主要顯示的還是美女
如果將權值修改一下:
final_img = cv2.addWeighted(img_gray0, 0.5, img_gray, 0.5, 8)
讓二者五五開,得到如下影像:

(4)影像像素點加常數
在前面的文章中提到過,影像的像素點值代表其亮度
在這里我們嘗試給每一個像素點加上 50 并與原圖對比
首先我們得創建一個和原圖同等尺寸的矩陣
Mix = np.ones(img1_1.shape, dtype=np.uint8)*50 #生成一個單位矩陣并乘以50,單位矩陣維度和 img1_1 相同
Addimg = cv2.add(Mix, img1_1) #給每一個像素點加50
cv2.namedWindow("Addimg")
cv2.imshow("Addimg", Addimg)
cv2.waitKey(delay = 0)
得到的影像如下:

2. 影像減法運算
(1)減小亮度
cv2.subtract() 函式可以實作影像之間的減法
下面我們還原上面得到的影像:
img1_2 = cv2.subtract(Addimg, Mix) #在得到的影像中減去矩陣
cv2.namedWindow("subimg")
cv2.imshow("subimg", img1_2)
cv2.waitKey(delay = 0)
得到的效果如下:

可見最上面的圖還原了中間的那一幅影像
(2)還原添加灰度影像的影像
在前面我們將灰度影像和原始影像相加得到一幅比較模糊的影像,這里我們嘗試對它進行還原
img1_3 = cv2.subtract(final_img, img_gray)
cv2.namedWindow("subimg1")
cv2.imshow("subimg1", img1_3)
cv2.waitKey(delay = 0)
得到的最終影像如下(subimg1 視窗):

可以看出減去灰度影像得到的影像并沒有將原圖復原出來,這是因為我們之前將兩影像進行相加是按照權值相加的,所以直接減去灰度影像會使整個影像亮度降低
3. 影像與運算
在影像的運算中參考的資料:openCV—Python(6)—— 影像算數與邏輯運算
img1_4 = cv2.bitwise_and(img_gray0, img_gray) #對兩種影像進行與操作
cv2.namedWindow("And")
cv2.imshow("And", img1_4)
cv2.waitKey(delay = 0)
得到的影像如下:

由于生成的灰度影像為單通道影像,所以需要將原影像轉化為灰度影像才能相與,再讀入一幅三通道的影像進行與操作:
代碼大致如下:
"""
Author:Huijun
date:2021/10/15
"""
import numpy as np
import cv2
img1 = cv2.imread('E:\From Zhihu\For the desk\de.jpg')
cv2.namedWindow("beauty0")
img1_1 = cv2.resize(img1, dsize= None, fx = 0.5, fy = 0.5)
cv2.imshow("beauty0", img1_1)
print(img1_1.shape)
cv2.waitKey(delay = 0)
img1_5 = cv2.imread('E:\From Zhihu\For the desk\de1.jpg')
img1_50 = cv2.resize(img1_5, dsize= None, fx = 0.834, fy = 0.903) #調整大小和前一幅影像一致
cv2.namedWindow("beauty1")
cv2.imshow("beauty1", img1_50)
cv2.waitKey(delay = 0)
print(img1_50.shape)
img1_51 = cv2.bitwise_and(img1_1, img1_50)
cv2.namedWindow("Add1")
cv2.imshow("Add1", img1_51)
cv2.waitKey(delay = 0)
得到的影像:



,,,,,離了個大譜!beauty0 和 beauty1 都沒了
4. 影像或運算
操作方式和影像的與運算一樣,只是函式的名稱變了
img1_51 = cv2.bitwise_or(img1_1, img1_50) #對兩影像進行或運算
得到的最終影像:
5. 影像異或運算
img1_51 = cv2.bitwise_xor(img1_1, img1_50) #對兩影像進行異或操作
得到的影像如下:

6. 影像非運算
對一個影像進行非操作
img1_51 = cv2.bitwise_not(img1_1) #對讀取的影像進行非操作
cv2.namedWindow("Not")
cv2.imshow("Not", img1_51)
cv2.waitKey(delay = 0)

7. 影像邏輯運算的意義
參考資料:知憾訓答
影像處理-邏輯運算
首先簡單的算術運算對于影像來說就是對像素點值進行處理,為一幅影像加上一些要素或者減去一些要素,來觀察影像的變化或者不同
在邏輯運算中,與運算可以求出兩影像相交的部分,即對應的像素如果同時為真時結果為真;
非運算主要是將黑變為白,將白變為黑,對灰度影像的處理十分有效;
或運算可以求兩種影像的合并,一個像素點為真時結果為真;
異或運算當兩像素點相同時結果為真,不同時結果為假,可以得到兩種影像不相交的部分,可以將影像進行扣出或者其他操作,
結束語
這篇文章主要匯總了影像處理程序中的一些算數運算和邏輯運算,也簡單介紹了它們的意義,主要涉及一些基礎操作,為后面的學習打下基礎;對于一些參考資料我也添加在文章中了,如果想深入了解可以點進去進行學習,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/319618.html
標籤:AI
