OpenCV ビット処理

OpenCVのビット処理

import numpy as np
import cv2

# Load two images
img1 = cv2.imread('roi.jpg')
img2 = cv2.imread('opencv.png')

# I want to put logo on top-left corner, So I create a ROI
rows,cols,channels = img2.shape
roi = img1[0:rows, 0:cols ]

# Now create a mask of logo and create its inverse mask also
img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)

cv2.imshow('img2gray',img2gray)
cv2.waitKey(0)

#関数は cv2.threshold を使います.第1引数は入力画像で
#グレースケール画像でなければいけません .
#第2引数はしきい値で,画素値を識別するために使われます.
#第3引数は最大値でしきい値以上(指定するフラグ次第では以下)
#の値を持つ画素に対して割り当てられる値です.
#OpenCVは幾つかのしきい値処理を用意しており,
#第4引数にて指定します.以下がフラグの一覧です:
#
#cv2.THRESH_BINARY
#cv2.THRESH_BINARY_INV
#cv2.THRESH_TRUNC
#cv2.THRESH_TOZERO
#cv2.THRESH_TOZERO_INV

ret, mask = cv2.threshold(img2gray, 10, 255, cv2.THRESH_BINARY)

cv2.imshow('mask',mask)
cv2.waitKey(0)

mask_inv = cv2.bitwise_not(mask)

cv2.imshow('mask_inv',mask_inv)
cv2.waitKey(0)

#cv2.bitwise_and(画像1,画像2,mask = マスク画像)
#画像1と画像2が同じ画像の場合、andをとっても同じ値

# Now black-out the area of logo in ROI
img1_bg = cv2.bitwise_and(roi,roi,mask = mask_inv)

cv2.imshow('img1_bg',img1_bg)
cv2.waitKey(0)

# Take only region of logo from logo image.
img2_fg = cv2.bitwise_and(img2,img2,mask = mask)

cv2.imshow('img2_fg',img2_fg)
cv2.waitKey(0)


# Put logo in ROI and modify the main image
dst = cv2.add(img1_bg,img2_fg)

cv2.imshow('dst',dst)
cv2.waitKey(0)

img1[0:rows, 0:cols ] = dst

cv2.imshow('res',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

コメント

このブログの人気の投稿

Python OpenCVとWebカメラでバーコードリーダー

OpenCV 画像の足し算

OpenCV3とPython3で形状のある物体の輪郭と方向を認識する(主成分分析:PCA、固有ベクトル)