按位運算 python
按位操做有:AND,OR,NOT,XOR 等。當咱們提取圖像的 一部分,選擇非矩形 ROI 時這些操做會頗有用,經常使用於Logo 投射。ide
本節操做思路:
經過 threshold 函數將圖片 固定閾值二值化,
定義:圖像的二值化,就是將圖像上的像素點的灰度值設置爲0或255,也就是將整個圖像呈現出明顯的只有黑和白的視覺效果。
一幅圖像包括目標物體、背景還有噪聲,要想從多值的數字圖像中直接提取出目標物體,經常使用的方法就是設定一個閾值T,用T將圖像的數據分紅兩部分:大於T的像素羣和小於T的像素羣。這是研究灰度變換的最特殊的方法,稱爲圖像的二值化(Binarization)。函數
import cv2 import numpy as np img = cv2.imread('1.jpg') img2 = cv2.imread('2c.jpg') rows,cols,channels = img2.shape roi = img[0:rows, 0:cols] GrayImage=cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY) # 中值濾波 GrayImage= cv2.medianBlur(GrayImage,5) # mask_bin 是黑白掩膜 ret,mask_bin = cv2.threshold(GrayImage,127,255,cv2.THRESH_BINARY) #mask_inv 是反色黑白掩膜 mask_inv = cv2.bitwise_not(mask) # 黑白掩膜 和 大圖切割區域 取和 img1_bg = cv2.bitwise_and(roi,roi,mask = mask_bin) #反色黑白掩膜 和 logo 取和 img2_fg = cv2.bitwise_and(img2,img2,mask = mask_inv) dst = cv2.add(img1_bg,img2_fg) img[0:rows, 0:cols ] = dst cv2.imshow('GrayImage',mask_bin) cv2.waitKey(0) cv2.destroyAllWindows()
爲便於理解,貼出過程圖3d
mask_bin 效果圖:code
mask_inv 效果圖:blog
img1_bg 和 img2_fg 效果圖:圖片
最終效果圖:it