python异或运算怎么算_小强学Python+OpenCV之-1.4.4掩膜mask及位运算(与、或、非、异或)...

a742f058691178e73573e5a13213d28a.png

问题引入

在小强学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)

效果

运行脚本:

dc29592ed93b794296f9beba5f1bb814.png

相信大家看到效果,再结合代码可以很容易理解。

裁剪

下面,我们利用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)

运行得到

得到:

5ad54316fb5b94560198769381ac3526.png

95c79ec00c44a4bb11b700fa00bae147.png

我们“近似”得到了猫的头像。

总结

1. 与或非异或运算与我们的常识类似。

2. 掩膜操作就是两幅图像(numpy数组)的位运算操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/281992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

51 Nod 1670 打怪兽

1670 打怪兽lyk在玩一个叫做“打怪兽”的游戏。游戏的规则是这样的。lyk一开始会有一个初始的能量值。每次遇到一个怪兽,若lyk的能量值>怪兽的能量值,那么怪兽将会被打败,lyk的能量值增加1,否则lyk死亡,游戏结束。若…

QQ协议调试器 QQDebugger

QQ协议老变,为了分析协议,单用抓包工具还是不够的,还是得需要很好的调试工具。在网上找了几个调试工具,易用性均欠佳,不得已自己开发了一个 QQDebugger,不敢专美,特意发布出来。QQDebugger 在功…

PostgreSQL 10.1 手册_部分 II. SQL 语言_第 5 章 数据定义_5.5. 修改表

5.5. 修改表 5.5.1. 增加列5.5.2. 移除列5.5.3. 增加约束5.5.4. 移除约束5.5.5. 更改列的默认值5.5.6. 修改列的数据类型5.5.7. 重命名列5.5.8. 重命名表当我们已经创建了一个表并意识到犯了一个错误或者应用需求发生改变时,我们可以移除表并重新创建它。但如果表中…

Uptime-Kuma 一个轻量的开源监控工具

点击蓝字 关注我们你好,这里是 Dotnet 工具箱,定期分享 Dotnet 有趣,有用的工具,不要忘记关注。今天给大家介绍一个开源的监控工具 Uptime Kuma, 主要用来监控 Web 以及网络, 和 Prometheus 相比, 它是轻量的, Uptime Kuma 是基于…

怎么查看mysql正在运行的语句_MySQL如何查询当前正在运行的SQL语句

通过status命令,查看Slow queries这一项,如果值长时间>0,说明有查询执行时间过长以下为引用的内容:mysql> status;--------------mysql Ver 11.18 Distrib 3.23.58, for redhat-linux-gnu (i386)Connection id: 53Current database: (n…

SpringBoot实战之SpringBoot自动配置原理

SpringBoot 自动配置主要通过 EnableAutoConfiguration, Conditional, EnableConfigurationProperties 或者 ConfigurationProperties 等几个注解来进行自动配置完成的。EnableAutoConfiguration 开启自动配置,主要作用就是调用 Spring-Core 包里的 loadFactoryName…

Install OpenCV-Python in Ubuntu

之前安装python版opencv,需要下载whl文件,进行安装,这是在window环境下的:安装opencv_python,下载whl包安装系统python下的opencv 今天发现一个简单的方法。Install OpenCV-Python in UbuntuInstall package python-opencv with f…

如何健康地跑步?

最近某司高管跑步 28 公里后猝死,被各大媒体报道,每次这种悲剧发生,而且还跟跑步扯上关系,总是让人心痛。通过报道了解到,这位高管酷爱跑马拉松,身体素质和运动能力肯定是强于普通人的,但还是遭…

项目共享协调机制

API,协调前端与后端开发的连接点。 面临几个问题 1. API更新不及时,导致前端开发的接口没有及时更新而出现各种问题。 2. 文档描述得不准确 3. 没有统一的标准。 我们可以使用swagger editor, swagger ui。第一是编辑器,第二个是展…

vs2008C1902程序数据库管理不匹配

大清早打开vs2008,出现这么诡异的错, 删了一个dll的就好了。如图

mysql user表 空_mysql 忘记密码,重置密码,mysql.user表为空的解决办法

一、用户表有用户,直接修改密码ERROR 1045 (28000): Access denied for user rootlocalhost (using password: YES)修改mysql配置文件my.cnf:vim /etc/my.cnf在[mysqld]中添加skip-grant-tables重启mysql服务,用空密码直接登录,查…

链式封装与调用

var CheckObject function(){}; CheckObject.prototype function(){checkName:function(){// codereturn this;},checkEmail:function(){// code return this;},checkPassword:function(){// codereturn this;} } //使用 var Check new CheckObject() Check.checkName().che…

全新升级的AOP框架Dora.Interception[3]: 基于特性标注的拦截器注册方式

在Dora.Interception中按照约定方式定义的拦截器可以采用多种方式注册到目标方法上。本篇文章介绍最常用的基于“特性标注”的拦截器注册方式,下一篇会介绍另一种基于(Lambda)表达式的注册方式:全新升级的AOP框架Dora.Interceptio…

在惨遭勒索病毒攻击之后,微软呼吁重新制定“数字日内瓦公约”

基于美国安全局泄露文档开发的病毒程序成为上周的主要新闻,该病毒导致全世界大量的Windows电脑瘫痪。WannaCry勒索病毒在150个国家有20万个受害者,包括英国的医院、西班牙的基础设施部门和俄罗斯的内政部。Renault在受到攻击之后关闭了几家在法国境内的工…

【代码审计】PHP代码审计---基础记录

PHP伪协议 PHP伪协议事实上是其支持的协议与封装协议,支持的种类有以下12种。 * file:// — 访问本地文件系统 * http:// — 访问 HTTP(s) 网址 * ftp:// — 访问 FTP(s) URLs * php:// — 访问各个输入/输出流(I/O streams) * zlib:// — 压…

全新升级的AOP框架Dora.Interception[4]: 基于表达式的拦截器注册

基于特性标注的拦截器注册方式仅限于将拦截器应用到自己定义的类型上,对于第三方提供的类型就无能为力了。对于Dora.Interception来说,拦截器注册本质上建立拦截器与一个或者多个目标方法之间的映射,所以最笨的方式就是利用反射的方式得到表示…

mysql8.0.12插件_MySQL8.0.12 安装及配置

MySQL8.0.12 安装及配置发布时间:2018-08-07 10:39,浏览次数:274, 标签:MySQL一.安装1.从网上下载MySQL8.0.12版本,下载地址:https://dev.mysql.com/downloads/mysql/2. 下载完成后解压我解压的路径是:D:\J…

python模块之hashlib

hashlib模块实现了多种安全哈希和信息摘要算法的通用接口,包括FIPS中定义的SHA1, SHA224, SHA256, SHA384, SHA512以及RFC 1321中定义的MD5 注意点:1. adler32及crc32哈希由zlib模块提供2. 某些算法已知存在哈希碰撞弱点 哈希算法 每个hash算法都有一个同…

记一次阿里电面经历

昨天下午(3/19)三点多钟,接到了一个杭州的电话,是阿里的。问我是否方便聊聊。我说我在上课,四点下课。然后他就四点多钟的时候又打了一次过来。项目经历上来就问我有无大型项目的经历。不好意思,我说无。。…

C语言程序设计第三次作业

(一)改错题 计算f(x)的值:输入实数x,计算并输出下列分段函数f(x)的值,输出时保留1位小数。 输入输出样例1:   Enterr x: 10.0   f(10.0) 0.1 输入输出样例2:   Enter x: 234   f(234.0…