OpenCV-17制作LOGO小练习

在编写代码之前我们需要理清思路:

1.引入图片

2.设计一个LOGO的图片

3. 规划一下LOGO希望放在那个位置,在添加的位置变为黑色

4. 利用add方法,将logo和图片叠加在一起

import cv2
import numpy as np

# 导入图片
dog = cv2.imread("dog.png")


# 创建LOGO
logo = np.zeros((200, 200, 3), np.uint8)   # 一个纯黑LOGO背景

# 绘制LOGO
logo[20:120, 20:120] = [255, 0, 0]
logo[80:180, 80:180] = [0, 255, 0]


cv2.imshow("logo", logo)
cv2.imshow("dog", dog)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出的LOGO图像如图所示: 

接下来我们计划将LOGO放在小狗图片的左上角。

在OpenCV位运算中,还存在掩码(mask)操作。

例如cv.bitwise_and(src1, src2, dst, mask)

位运算,前面两个图片先做一个与运算,与完之后再与掩码做一个与运算。

如果结果为True,则显示前面与完结果之后的值

如果结果为False,则统一为0

且无论是and、or、not、xor在OpenCV中与掩码的操作都为与运算。

roi = dog[0:300, 0:300]   # 浅拷贝

# roi与m进行与操作
tmp = cv2.bitwise_and(roi, roi, mask=m)    # roi与roi与操作之后还是roi,
# 在于mask进行与运算,如果结果为True,返回原图,如果为False,返回黑色。
cv2.imshow("tmp", tmp)

此时发现得到的tmp与logo进行add运算,即可把logo嵌入。

dst = cv2.add(tmp, logo)
cv2.imshow("dst",dst)

最后我们再在dog上还原图片

dog[:300, :300] = dst

最终我们可以得到一下带LOGO的小狗图片

综合演示代码如下所示:

import cv2
import numpy as np

# 导入图片
dog = cv2.imread("dog.png")

# 创建LOGO
logo = np.zeros((300, 300, 3), np.uint8)  # 一个纯黑LOGO背景

# 绘制LOGO
logo[20:120, 20:120] = [255, 0, 0]
logo[80:180, 80:180] = [0, 255, 0]

# 创建一个掩码
mask = np.zeros((300, 300), np.uint8)  # 创建一个二维的与LOGO一样的的掩码
mask[20:120, 20:120] = 255
mask[80:180, 80:180] = 255

cv2.imshow("mask", mask)
m = cv2.bitwise_not(mask)  # 将创建的掩码取反
cv2.imshow("m", m)

# 选择dog添加LOGO的位置
roi = dog[0:300, 0:300]   # 浅拷贝

# roi与m进行与操作
tmp = cv2.bitwise_and(roi, roi, mask=m)    # roi与roi与操作之后还是roi,
# 在于mask进行与运算,如果结果为True,返回原图,如果为False,返回黑色。
cv2.imshow("tmp", tmp)
# 进行add拼接
dst = cv2.add(tmp, logo)
cv2.imshow("dst",dst)

# 在dog上还原
dog[:300, :300] = dst

cv2.imshow("logo", logo)
cv2.imshow("dog", dog)
cv2.waitKey(0)
cv2.destroyAllWindows()

相关推荐

  1. Python OpenCV 牛刀小试(练习

    2024-01-08 06:04:03       45 阅读
  2. 练习4-10 找出最

    2024-01-08 06:04:03       30 阅读
  3. 17 OpenCv Canny算子

    2024-01-08 06:04:03       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-08 06:04:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-08 06:04:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-08 06:04:03       87 阅读
  4. Python语言-面向对象

    2024-01-08 06:04:03       96 阅读

热门阅读

  1. 华为HCIE课堂笔记第十三章 IPv6地址配置

    2024-01-08 06:04:03       50 阅读
  2. 基于单片机的智能电子秤控制系统的设计与实现

    2024-01-08 06:04:03       65 阅读
  3. 网络通信(7)-TCP协议解析

    2024-01-08 06:04:03       52 阅读
  4. Linux中手动引导启动和密码破解

    2024-01-08 06:04:03       57 阅读
  5. Linux 命令kill

    2024-01-08 06:04:03       53 阅读
  6. 01.QT概述

    2024-01-08 06:04:03       52 阅读
  7. Qt之设置QLabel的背景色和前景色

    2024-01-08 06:04:03       55 阅读
  8. 基于SpringBoot的校园外卖服务系统

    2024-01-08 06:04:03       62 阅读
  9. PaddlePaddle初使用

    2024-01-08 06:04:03       57 阅读
  10. 复试 || 就业day11(2024.01.07)算法篇

    2024-01-08 06:04:03       49 阅读