python-opencv-图像的按位运算

python-opencv-图像的按位运算_第1张图片

OpenCV中为我们提供了四种按位运算,分别是按位与、按位或、按位非和按位异或。图像的按位运算本质上就是对像素点值的按位运算,接触过计算机知识的人应该知道,按位运算是针对二进制数而言的,也就是说只有0和1两个值,因此,我们在对图像进行按位运算时,需要将图像转化成灰度图。

假设现在我们有一张五环图像,我们要用它给其他图像做水印,但是它的底色是纯白色的,我们首先需要处理底色。

python-opencv-图像的按位运算_第2张图片

 

 

 

 

 

·阈值二值化
灰度图共分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()

效果图:

python-opencv-图像的按位运算_第3张图片

 

 

按位非:

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()

效果图:

python-opencv-图像的按位运算_第4张图片

 

按位与: 

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

效果图:

python-opencv-图像的按位运算_第5张图片

 

python-opencv-图像的按位运算_第6张图片

 

python-opencv-图像的按位运算_第7张图片

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(python-opencv-图像的按位运算)