python异或运算怎么算_小强学Python+OpenCV之-1.4.4掩膜mask及位运算(与、或、非、异或)...
问题引入
在小强学Python+OpenCV之-1.4.2裁剪一节,我们使用的是numpy数组切片功能实现图片区域的裁剪。
那么,如果我们想要裁剪图像中任意形状的区域时,应该怎么办呢?
答案是,使用掩膜(masking)。
但是这一节我们先看一下掩膜的基础。图像的位运算。
代码
编写python脚本masking.py如下:
# 导入库
import numpy as np
import argparse
import cv2# 构建参数解析器
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="Path to the image")
args = vars(ap.parse_args())# 加载猫的图像
image = cv2.imread(args["image"])
cv2.imshow("Cat", image)# 创建矩形区域,填充白色255
rectangle = np.zeros(image.shape[0:2], dtype = "uint8")
cv2.rectangle(rectangle, (25, 25), (275, 275), 255, -1)
cv2.imshow("Rectangle", rectangle)# 创建圆形区域,填充白色255
circle = np.zeros(image.shape[0:2], dtype = "uint8")
cv2.circle(circle, (150, 150), 150, 255, -1)
cv2.imshow("Circle", circle)# 在此例(二值图像)中,以下的0表示黑色像素值0, 1表示白色像素值255
# 位与运算,与常识相同,有0则为0, 均无0则为1
bitwiseAnd = cv2.bitwise_and(rectangle, circle)
cv2.imshow("AND", bitwiseAnd)
cv2.waitKey(0)# 或运算,有1则为1, 全为0则为0
bitwiseOr = cv2.bitwise_or(rectangle, circle)
cv2.imshow("OR", bitwiseOr)
cv2.waitKey(0)# 非运算,非0为1, 非1为0
bitwiseNot = cv2.bitwise_not(circle)
cv2.imshow("NOT", bitwiseNot)
cv2.waitKey(0) # 异或运算,不同为1, 相同为0
bitwiseXor = cv2.bitwise_xor(rectangle, circle)
cv2.imshow("XOR", bitwiseXor)
cv2.waitKey(0)
效果
运行脚本:
相信大家看到效果,再结合代码可以很容易理解。
裁剪
下面,我们利用OR结果(有点像猫的头像轮廓)把本课的主题图片中的猫的头像剪切出来。
我们需要修改一下,矩形区域的大小,去掉下边的两个角。
cv2.rectangle(rectangle, (25, 25), (275, 220), 255, -1)
最终调整后的代码如下:
# 导入库
import numpy as np
import argparse
import cv2# 构建参数解析器
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="Path to the image")
args = vars(ap.parse_args())# 加载猫的图像
image = cv2.imread(args["image"])
cv2.imshow("Cat", image)# 创建矩形区域,填充白色255
rectangle = np.zeros(image.shape[:2], dtype = "uint8")
cv2.rectangle(rectangle, (380, 100), (575, 200), 255, -1)
cv2.imshow("Rectangle", rectangle)# 创建圆形区域,填充白色255
circle = np.zeros(image.shape[:2], dtype = "uint8")
cv2.circle(circle, (475, 180), 105, 255, -1)
cv2.imshow("Circle", circle)# 或运算
bitwiseOr = cv2.bitwise_or(rectangle, circle)
cv2.imshow("OR", bitwiseOr)
cv2.waitKey(0)mask = bitwiseOr
cv2.imshow("Mask", mask)# Apply out mask -- notice how only the person in the image is cropped out
masked = cv2.bitwise_and(image, image, mask=mask)
cv2.imshow("Mask Applied to Image", masked)
cv2.waitKey(0)
运行得到
得到:
我们“近似”得到了猫的头像。
总结
1. 与或非异或运算与我们的常识类似。
2. 掩膜操作就是两幅图像(numpy数组)的位运算操作。
python异或运算怎么算_小强学Python+OpenCV之-1.4.4掩膜mask及位运算(与、或、非、异或)...相关推荐
- c++ opencv 识别车牌_小强学Python+OpenCV之-1.0开篇
写在前面: 有没有想过使用Python + OpenCV来实现人脸识别? 想想就有点小兴奋吧. 小强也是不久前才了解到可以使用Python + OpenCV进行图像处理.觉得有趣就想学习一下. 在这里 ...
- 小强学Python+OpenCV之-1.4.4掩膜mask及位运算
原文:http://blog.csdn.net/eric_pycv/article/details/72887748 问题引入 在1.4.3裁剪一节,我们使用的是numpy数组切片功能实现图片区域的裁 ...
- python语言流程控制语句的格式_慢步学python,编程基础知识,流程控制语句if
慢步业余学python编程,今天休息继续分享python编程知识. 面向过程编程,重要的是程序的流程,今天说说流程控制语句if. 在我们高中数学中就有流程图的学习,只是没有真正应用起来而已,办公软件也 ...
- python小白应该看什么书_小白学python看什么书
适合小白阅读的python入门书有 <Python编程 从入门到实战> 本书中涵盖的内容是比较精简的,没有艰深晦涩的概念,最重要的是每个小结都附带有"动手试一试"环节, ...
- opencv 把3通道图像转成单通道_小强学Python+OpenCV之-1.4.3图像(矩阵)加减运算
引入 问题引入,考虑以下几个问题: Q1. 一个3通道像素p的BGR分量(8bit表示)值均相同,那么这个像素是什么颜色的? Q2. 该像素p加上自己,即,像素p的各个通道值翻倍,那么这个像素的颜色会 ...
- python的read函数调用报错_从零开始学Python(七):文件存储I/O流和异常捕捉
这两天在搞小程序开发,耽搁了一下更新的进度,今天补上.一个完整的前端程序肯定离不开数据存储和网络两个模块,今天我们就先来讲讲python中的一种常见数据存储:文件存储!~! 文件存储(I/O操作) 何 ...
- python在路径里添加变量_想学Python?那就先从头开始吧!
作为人工智能和大数据时代最具竞争力的 Python 语言,越来越多的出现在各大编程热搜排行榜上. 首先你要了解什么是python 了解Python语言 Python是一种解释型, 面向对象, 动态数据 ...
- python使用字典描述学生信息_一起学Python:字典介绍
字典介绍 想一想: 如果有列表 nameList = ['xiaoZhang', 'xiaoWang', 'xiaoLi']; 需要对"xiaoWang"这个名字写错了,通过代码修 ...
- 用python做股票量化分析豆瓣_小白学 Python 爬虫(24):2019 豆瓣电影排行
人生苦短,我用 Python 前文传送门: 引言 从本篇的标题各位同学应该已经猜到了,本篇又到了实战环节~~~ 2019 已经快过完了,按照本文推送的时间预估,到 2020 应该还有十来天的时间,又到 ...
最新文章
- python 7-10梦想的度假胜地_7-8----7-10练习
- asp.net序列化
- 顶会论文轮番炸场,本周哪些论文最值得读?
- 重口味动漫_每种口味的图标样式
- [JavaWeb-Servlet]Servlet中的生命周期方法(init,service,destroy)
- 基于jsf的项目_JSF基于事件的沟通:过时的方法
- 40个新鲜出炉的 jQuery 插件和免费教程【上篇】 转载自:梦想天空
- C# 中的 is 和 as 运算符 简单举例说明
- php查询记录是否存在,php – 如果记录存在,我可以更新记录,如果不存在,可以在单个查询中更新多行吗?...
- 4G模块使用记录移远EC20、BC20
- centos安装libconfig
- 自动跳动滑动门html,CSS如何实现滑动门效果_html/css_WEB-ITnose
- 谷歌生物医学翻译软件_翻译器可翻译方言和文言文 超出谷歌微软的翻译软件能力...
- Python 结合bat批处理文件 实现密码保管箱
- arduino-解决舵机与直流电机冲突问题
- C# Word 悬挂缩进 首行缩进 的设置
- getch计算机错误,为什么getch()在C中抛出一个错误
- 怎么删除w7桌面计算机图标,桌面无法删除的图标,小编教你win7桌面图标删不掉怎么办...
- Android studio 安装配置SDK
- 2018航电多校练习第9场-快速幂
热门文章
- 【Docker】Asp.net core在docker容器中的端口问题
- 揭秘软件开发的达摩克利斯之剑
- ASP.NET Core 5.0新增功能摘要
- C#并发编程之初识并行编程
- 推荐一个集录屏、截图、音频于一体的软件给大家
- 开源、免费、企业级的SiteServer CMS .NET CORE 7.0 预览版发布
- .NET Core开发实战(第12课:配置变更监听)--学习笔记
- 面对金九银十铜十一你真的准备好了吗?
- C# 8.x 先睹为快
- .NET Core 3.0 可回收程序集加载上下文