python-opencv-图像的按位运算

Posted 天子骄龙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-opencv-图像的按位运算相关的知识,希望对你有一定的参考价值。

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

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

 

 

 

 

 

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

效果图:

 

 

按位非:

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

效果图:

 

按位与: 

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-图像的按位运算的主要内容,如果未能解决你的问题,请参考以下文章

开发人员应该了解哪些有用的按位运算符代码技巧? [关闭]

128 位整数之间的按位运算

Delphi中的按位补码。 (翻译C#〜运算符)

位掩码 - C中的按位运算

C语言里的按位异或运算符

Apache Pig 中的按位运算?