python opencv 图像按位操作

原创 2016年08月28日 16:21:04

13-python opencv 图像按位操作


概述

本节实现的是使用OpenCV里自带的函数,将一幅logo加到一张图片上去。

  • 提取mask
  • 利用mask生成带logo图片

实现过程

引用与读取图片

不再赘述,代码如下。

import cv2
import numpy as np

img = cv2.imread('test.png')
logo = cv2.imread('logo.jpg')
cv2.imshow("Img_Original", img)

获取mask

先将logo转成黑白,然后设置合适的阈值二值化,使得有内容的部分为黑(0),无内容的部分为白(255),这里使用的阈值为205。

logo_gray = cv2.cvtColor(logo, cv2.COLOR_BGR2GRAY)
# binary & mask
ret, mask = cv2.threshold(logo_gray, 205, 255, cv2.THRESH_BINARY)

根据logo大小提取感兴趣区域

获取logo大小,在图像的左上角提取同样大小的ROI。

rows, cols, channels = logo.shape
roi = img[0:rows, 0:cols]

将logo加到感兴趣区域

如果mask部分为黑,则将ROI的这部分用logo的内容替换,否则保留其原先内容。

# dst
dst = roi
for r in range(rows):
    for c in range(cols):
        if mask[r, c] == 0:
            dst[r, c, :] = logo[r, c, :]
# add the dst to the img
img[0:rows, 0:cols] = dst

显示图片

cv2.imshow("Color Logo", logo)
cv2.imshow("Gray Logo", logo_gray)
cv2.imshow("Mask", mask)
cv2.imshow("Dst", dst)
cv2.imshow("Img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

源代码

整个程序的源代码如下:

# created by Huang Lu
# 28/08/2016 13:55:37    
# Department of EE, Tsinghua Univ.

import cv2
import numpy as np

img = cv2.imread('test.png')
logo = cv2.imread('logo.jpg')
cv2.imshow("Img_Original", img)

logo_gray = cv2.cvtColor(logo, cv2.COLOR_BGR2GRAY)
rows, cols, channels = logo.shape
roi = img[0:rows, 0:cols]
# binary & mask
ret, mask = cv2.threshold(logo_gray, 205, 255, cv2.THRESH_BINARY)
# dst
dst = roi
for r in range(rows):
    for c in range(cols):
        if mask[r, c] == 0:
            dst[r, c, :] = logo[r, c, :]
# add the dst to the img
img[0:rows, 0:cols] = dst


cv2.imshow("Color Logo", logo)
cv2.imshow("Gray Logo", logo_gray)
cv2.imshow("Mask", mask)
cv2.imshow("Dst", dst)
cv2.imshow("Img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

也可以参考我的GitHub上的,点击这里

运行结果

在命令行进入该源程序所在目录后,运行python main.py后即可显示结果。显示结果如下:

融和图片

参考

版权声明:本文为博主原创文章,未经博主允许不得转载。

OpenCV-Python[第三章]——位操作

说明OpenCV提供了4种位操作,AND,OR,NOT,XOR。函数为相关的操作加“cv2.bitwise_”前缀。如:cv2.bitwise_not。对于2元操作而言,至少两个参数,src1,src...

Opencv学习笔记(三)--图像处理的基本操作

Opencv图像处理基本操作1基本数据类型 图像有若干个通道,灰度图像只有一个通道,而彩色具有红,绿,蓝组成,但是OpenCv以逆序的方式来存储三个分量,还可以使用第四个透明度(alpha),可以...

Python判断字符串是否为合法标示符

这学期在学习编译原理,最近的上机作业就是做一个简单的词法分析器,在做的过程中,突然有个需求就是判断一个字符串是否为合法的标示符,因为我是用python语言做的,做的是Python的词法分析器,于是下面...

【机器学习基础】理解为什么机器可以学习2——Hoeffding不等式

PAC可学习性很大程度上由所需的训练样本数量决定。随着问题规模的增长所带来的所需训练样本的增长称为学习问题的样本复杂度(sample complexity)。在多数实际问题中,最限制学习器成功的因素是...

python+opencv操作图像视频

直接上code吧,算是学习笔记。 #!/usr/bin/env python import numpy as np import cv2 #imread第二个参数为0,强制将图像转换为灰度图像,如果...
  • szfhy
  • szfhy
  • 2016年04月06日 17:43
  • 2327

Python下使用OpenCV——图像的基本操作

图像的基本操作

Python用OpenCV 处理图像的基本操作

Python用OpenCV处理图像的基本操作

OpenCV-Python[第三章]——图像格式及操作方法

理解图像 完整代码 补充说明理解图像图像其实就是一个2维数组,因此可以使用行列坐标对图像像素点进行定位。对于彩色图像,每个像素点对应的是一个包含bgr(cv2.imread读取的图像为BGR模式)的三...

python opencv入门 基本图像操作(6)

内容来自OpenCV-Python Tutorials 自己翻译整理目标: 获取像素值并修改 获取图像属性 设定图像区域 分割和拼接图像上面内容和python中的numpy库操作有重要联系,熟...

Python-OpenCV 处理图像(一):基本操作 cv2

0x00. 图片读、写和显示操作 安装好 OpenCV 之后,首先尝试加载一张最简单的图片并显示出来,代码示例: 第一种方式使用cv2.cv的LoadImage、ShowImage和SaveIma...
  • jqw11
  • jqw11
  • 2017年06月28日 09:15
  • 1339
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python opencv 图像按位操作
举报原因:
原因补充:

(最多只允许输入30个字)