初識OpenCV 練習筆記整理--學習六。【影象的算術運算】
阿新 • • 發佈:2018-12-20
"""
學習內容:
影象的算術運算
目標:
學習影象上的算術運算,加法,減法,位運算等。
學習的函式有:cv2.add(), cv2.addWeighted()
"""
# 第一小節 影象的加法,使用函式cv2.add()將兩幅影象進行加法運算。注意兩幅影象的大小和型別必須一致 2018/10/26 10:08 import cv2 import numpy as np x = np.uint8([250]) y = np.uint8([10]) print(cv2.add(x, y)) # 250+10 = 260 => 255 因為最大值為255 print(x + y) # 250+10 = 260 % = 4 """ 結果分析: 對兩幅影象進行加法時候會更加明顯。OpenCV的結果會更好點。所以我們儘量使用OpenCV中的函式 """
# 第二小節 影象的混合 cv2.addWeighted() 2018/10/26 10:10 """ 前提: 這其實也是加法,但是不同的是兩幅影象的權重不同,就會給人一種混合或者透明的感覺。影象混合的計算公式如下: g (x) = (1−α)f0 (x) + αf1 (x) so 我們可以通過修改α的值(0--->1),可以實現非常酷的混合 dst = α·img1 + β ·img2 + γ 這裡的α取值為0 """ import cv2 import numpy as np img1 = cv2.imread('./image/image0.5858483461472451') img2 = cv2.imread('./img01.jpg') dst = cv2.addWeighted(img1, 0.7, img2, 0.3, 0) cv2.imshow('dst', dst) cv2.waitKey(0) cv2.destroyAllWindows() """ 結果分析: 必須是兩張影象大小一致的不然會報錯的。 """
# 第三小節 按位運算 2018/10/26 10:26 """ 前提: 按位操作有: AND,OR,NOT,XOR等.當我們提取影象的一部分,選擇非矩形ROI時 這些操作會很有用 目的: 我想把OpenCV的標誌放在另一幅影象上.如果我們是用加法顏色會改變,如果使用混合,會得到透明效果,但是我不想要透明. """ import cv2 import numpy as np img1 = cv2.imread('./66.jpg') # 讀取圖片 img2 = cv2.imread('./OpenCV.jpg') rows, cols, channels = img2.shape # 獲取圖片的長和高(行數 和 列數) roi = img1[0:rows, 0:cols] # 擷取圖片一的位置大小 img2gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY) # 進行圖片二顏色的修改 print(img2gray.shape) 從結果來看 是一個灰度圖 ret, mask = cv2.threshold(img2gray, 175, 255, cv2.THRESH_BINARY) # 轉化為灰度圖 mask_inv = cv2.bitwise_not(mask) # 灰度圖的相反 白變黑 黑變白 img1_bg = cv2.bitwise_and(roi, roi, mask=mask) img2_fg = cv2.bitwise_and(img2, img2, mask=mask_inv) dst = cv2.add(img1_bg, img2_fg) # 把兩個圖片合成一個圖 img1[0:rows, 0:cols] = dst # 然後去替代大圖中的位置 cv2.imshow('res', mask) cv2.waitKey(0) cv2.destroyAllWindows() """ 結果分析: 第一 方法的介紹和使用: cv2.imread()圖片的讀入 cv2.cvtColor() 空間顏色的轉換,一般用這個多是轉換為灰度圖的. cv2.threshold() 他的用法是ret,dst = cv2.threshold(src, thresh, maxval, type) src: 輸入圖,只能為單通道影象,通常來說為灰度圖 dst: 輸出圖 thresh: 閾值 maxval: 當畫素值超過閾值(或者小於閾值,根據type來決定),所賦予的值 type: 二值化操作的型別,包含一下5種類型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV 作用: 畫素高於閾值時,給畫素賦予新值,否則,賦予另外一種顏色。函式是cv2.threshold() 返回值retval其實就是閾值 cv2.bitwise_not() 圖片效果反轉 一般傳入的多為灰度圖片 白色變成黑色 黑色變成白色 cv2.bitwise_and() 計算兩個陣列或陣列和標量的每元素逐位連線。cv2.bitwise_and( src1,src2 [,dst [,mask ] ] ) 引數: src1 - 第一個輸入陣列或標量。 src2 - 第二個輸入陣列或標量。 dst - 與輸入陣列具有相同大小和型別的輸出陣列。 mask - 可選操作掩碼,8位單通道陣列,指定要更改的輸出陣列的元素。 """
總結: 應該有些解釋很牽強 這只是我個人的理解 後期的學習中肯定會認識到現在自己所寫的註釋有毛病 請你們不要參考 我只是記錄我自己的學習筆記而已.