OpenCV基本功 之 图像的掩模、运算 & 合并专题 -小啾带学【Python-Open_CV系列(七)】(下)

简介: OpenCV基本功 之 图像的掩模、运算 & 合并专题 -小啾带学【Python-Open_CV系列(七)】

2.2.2 按位或 cv2.bitwise_or()

使用按位或运算对图像操作可以取得与按位与相反的处理结果。

import cv2
import numpy as np
img1 = cv2.imread("pic.jpg")
mask = np.zeros(img1.shape, np.uint8)
# 横着的白色区域
mask[490:600, :, :] = 255
# 竖着的白色区域
mask[:, 470:545, :] = 255
img2 = cv2.bitwise_or(img1, mask)
cv2.imshow("img", img2)
cv2.waitKey()
cv2.destroyAllWindows()

1.png

2.2.3 按位取反 cv2.bitwise_not()

按位取反是仅对一个图像做的操作,根据二进制,如果某位置上数值为0,则改为1;如果为1则该为0。

import cv2
img1 = cv2.imread("pic.jpg")
img2 = cv2.bitwise_not(img1)
cv2.imshow("img", img2)
cv2.waitKey()
cv2.destroyAllWindows()

处理结果如下图所示:

image.png

2.2.4 按位异或 cv2.bitwise_xor()

对二进制位进行判断,如果两个运算数的同一位上的数字相同,则运算结果的相同位数字取0,否则取1。

这个描述有些抽象。可以简单理解为,催掩码匹配到的区域做取反运算,掩码匹配不到的区域保持图像原状。具体见下方图像:

import cv2
import numpy as np
img1 = cv2.imread("pic.jpg")
mask = np.zeros(img1.shape, np.uint8)
# 横着的白色区域
mask[490:600, :, :] = 255
# 竖着的白色区域
mask[:, 470:545, :] = 255
img = cv2.bitwise_xor(img1, mask)
cv2.imshow("img", img)
cv2.waitKey()
cv2.destroyAllWindows()

效果呈现:

image.png

2.3 图像加密

通过按位异或运算,还可以实现对图像的加密。使用numpy创建随机数组的方法,创建一个随机像素值图像作为密匙,进而实现对原图像的加密和解密。结果因图片过大不再展示。

import cv2
import numpy as np
# 定义加密、解密方法
def encode_img(img, img_key):
    result = img = cv2.bitwise_xor(img, img_key)
    return result
# 原图
img = cv2.imread("pic.jpg")
rows, colmns, channel = img.shape
# 创建大小相等的密钥图像
img_key = np.random.randint(0, 256, (rows, colmns, 3), np.uint8)
cv2.imshow("img", img)
cv2.imshow("img_key", img_key)
Encryption_result = encode_img(img, img_key)
cv2.imshow("After Encryption", Encryption_result)
Decryption_result = encode_img(Encryption_result, img_key)
cv2.imshow("After Decryption", Decryption_result)
cv2.waitKey()
cv2.destroyAllWindows()

3.图像的合并

图像合并也是图像处理的一种常用操作,图像合并可以分为加权合并和覆盖合并。

再找一张与pic.jpg相同尺寸、名为“pic2.jpg”的图片如下图所示:

image.png

将该图片与pic.jpg分别按照0.2和0.8的权重进行合并,代码即执行效果如下:

3.1加权合并

import cv2
img1 = cv2.imread("pic.jpg")
img2 = cv2.imread("pic2.jpg")
rows, colmns, channel = img1.shape
img3 = cv2.resize(img2, (colmns, rows))
img = cv2.addWeighted(img1, 0.8, img3, 0.2, 0)
cv2.imshow("new_pic", img)
cv2.waitKey()
cv2.destroyAllWindows()

image.png

3.2 覆盖合并

OpenCV没有直接提供覆盖操作的方法,因此要实现覆盖还需要自己动手。

以下边这张金底白字的标签图片为例(pic3.png),

image.png

将其贴在pic.jpg上(覆盖)

import cv2
img1 = cv2.imread("pic.jpg")
img2 = cv2.resize(cv2.imread("pic3.png"), dsize=None, fx=2, fy=2)
y, x, z = img2.shape
X = 180
Y = 70
img1[Y:Y+y, X:X+x, :] = img2
cv2.imshow("new_pic", img1)
cv2.waitKey()
cv2.destroyAllWindows()

效果呈现如下

1.png

目录
相关文章
|
4天前
|
算法 计算机视觉
OpenCV高斯差分技术实现图像边缘检测
OpenCV高斯差分技术实现图像边缘检测
|
5天前
|
Serverless Python
Python----图像的手绘效果
Python----图像的手绘效果
8 1
|
6天前
|
计算机视觉
OpenCV图像运动模糊
OpenCV图像运动模糊
9 0
|
6天前
|
计算机视觉
OpenCV图像阈值
OpenCV图像阈值
5 0
|
6天前
|
计算机视觉
OpenCV图像混合
OpenCV图像混合
8 0
|
6天前
|
计算机视觉 Python
OpenCV为图像扩边(填充)
OpenCV为图像扩边(填充)
9 0
|
6天前
|
计算机视觉 Python
【Python实战】——Python+Opencv是实现车牌自动识别
【Python实战】——Python+Opencv是实现车牌自动识别
|
6天前
|
计算机视觉 Python
轻松掌握opencv的8种图像变换
轻松掌握opencv的8种图像变换
|
6天前
|
算法 计算机视觉
【OpenCV】- 图像修复
【OpenCV】- 图像修复
|
6天前
|
Serverless 计算机视觉
【OpenCV】-图像的矩
【OpenCV】-图像的矩