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.pswp.cn/news/281992.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281992.shtml
英文地址,請注明出處:http://en.pswp.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…